在我的应用中,我有一个闪烁的播放暂停按钮,我使用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_pause
和play_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中的一个错误,但我在互联网上找不到任何关于它的信息。有没有人以前见过这个问题,如果是的话,是否有解决方法?
答案 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();
}
});
}