0

在我的应用程序中,我使用了一个闪烁的播放暂停按钮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_pausePNGplay_pause_play文件。此动画@drawable/play_pause_ready在 a 中使用(as )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>

而 thelevel-list又被用作 a 中的复合可绘制对象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 上,一切正常,但在运行 Froyo 的 HTC Desire 上,动画显示错误。动画的第一帧显示大致正确的持续时间(750 毫秒),但第二帧显示的时间很短,不超过 20 毫秒。

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

4

1 回答 1

1

我在 Android 2.2 上遇到了类似的问题animation-list,3.2
解决了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();
        }
    });
}
于 2013-10-16T09:13:51.597 回答