我在ListView中的行布局中有一个framelayout。当项目出现在列表视图中时,会触发AnimationDrawable。
这在Nexus 4和Nexus 5上运行良好。我不得不使用view.setBackground更改为view.setBackgroundDrawable以支持稍微较旧的设备。在任何一款Nexus设备上都没有破坏它。它也适用于旧的姜饼设备。
在HTC One V上运行4.03。从未出现过AnimationDrawable。但是,如果我将行xml文件硬编码以显示标准drawable,而不是dynamicdrawable,那么它看起来很好。
这是dynamicdrawable的xml文件
<item
android:drawable="@drawable/alert_red"
android:duration="700"/>
<item
android:drawable="@drawable/alert_red_glow"
android:duration="700"/>
</animation-list>
这是启动动画的代码
@SuppressWarnings("deprecation")
public void startGlowingRow() {
notificationStatus
.setBackgroundDrawable(getResources().getDrawable(
R.drawable.glowing_emergency_notification));
glowRequest = new GlowRequest();
notificationStatus.post(glowRequest);
}
public void stopGlowingRow() {
try {
// Remove any callbacks to make background glowing
if (glowRequest != null)
notificationStatus.removeCallbacks(glowRequest);
glowDrawable = (AnimationDrawable) notificationStatus
.getBackground();
glowDrawable.stop();
} catch (ClassCastException cce) {
// Not the correct background in view so don't try to stop
}
}
// Runnable which sets glowing effect after view has loaded
private class GlowRequest implements Runnable {
public void run() {
glowDrawable = (AnimationDrawable) notificationStatus
.getBackground();
glowDrawable.start();
}
}
答案 0 :(得分:0)
我终于弄明白了。这是因为包含动画的视图使用填充来显示它的背景。当我改变它,以便它的第一个孩子使用保证金而不是它工作得很好