Froyo上的动画列表帧持续时间是错误的

时间:2012-10-30 12:51:21

标签: android android-animation android-2.2-froyo

在我的应用中,我有一个闪烁的播放暂停按钮,我使用animation-list制作,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
    <item android:drawable="@drawable/play_pause" android:duration="750" />
    <item android:drawable="@drawable/play_pause_play" android:duration="750" />
</animation-list>

play_pauseplay_pause_play都是PNG文件。此动画在@drawable/play_pause_ready

中使用(level-list
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:maxLevel="1" android:drawable="@drawable/play_pause_pause" />
    <item android:maxLevel="2" android:drawable="@drawable/play_pause_play" />
    <item android:maxLevel="3" android:drawable="@drawable/play_pause" />
    <item android:maxLevel="10" android:drawable="@drawable/play_pause_ready" />
</level-list>

并且level-list依次用作TextView中的复合可绘制对象。如果它是相关的,操作它的代码如下:

private void updatePlayPauseButton(...) {
    if (getView() != null) {
        LevelListDrawable ld = (LevelListDrawable) timeField.getCompoundDrawables()[2];
        ld.setLevel(...);
        Drawable child = ld.getCurrent();
        if (child instanceof AnimationDrawable) {
            AnimationDrawable ad = (AnimationDrawable) child;
            ad.start();
        }
    }
}

并从onStart()和其他地方调用(当按下按钮时调用它的行为相同)。

在ICS和Jellybean上,一切都很完美,但在我的HTC Desire上运行Froyo时,动画显示错误。动画的第一帧大致显示正确的持续时间(750毫秒),但第二帧显示的时间非常短,不超过20毫秒。

这看起来非常像Froyo中的一个错误,但我在互联网上找不到任何关于它的信息。有没有人以前见过这个问题,如果是的话,是否有解决方法?

1 个答案:

答案 0 :(得分:1)

我在Android 2.2,3.2上遇到与animation-list类似的问题 用AnimationDrawable.setCallback()

解决
void startAnimation(ImageView iv) {
    final AnimationDrawable ad = (AnimationDrawable) iv.getDrawable();
    ad.setCallback(iv);
    ad.setVisible(true, true);
    iv.post(new Runnable() {
        @Override public void run() {
            ad.start();
        }
    });
}