在执行帧动画(frame animation)时,发现在一些SDK 2.3的机型上会出现不执行问题。
下面是animation配置:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:repeatCount="infinite"
android:repeatMode="restart"
android:shareInterpolator="true" >
<translate
android:duration="1500"
android:fromXDelta="0"
android:fromYDelta="0"
android:repeatCount="infinite"
android:repeatMode="restart"
android:toXDelta="0"
android:toYDelta="-100%" />
<alpha
android:duration="1500"
android:fromAlpha="1.0"
android:repeatCount="infinite"
android:repeatMode="restart"
android:toAlpha="0" />
</set>
执行代码:
arrowImage.setImageResource(R.drawable.upload_pic_arrow);
final AnimationDrawable anim = (AnimationDrawable) arrowImage.getDrawable();
anim.start();
常理说应该是没问题的,在2.3以上的机型也没问题。
在2.3机型上出现了循环动画不能执行,仅出现第一帧 的情况。
后来把anim.start();放到Handler的post方法中执行就没问题了
分析:2.3机型配置一般比较差,不排除帧动画绘制还没完成时,主线程就被转到执行其他UI操作了。而Handler中的post方法把动画执行放到主线程UI队列中的最后去执行,保证了动画执行不会被其他UI线程抢走。