动画列表最初没有动画

时间:2011-11-10 17:15:37

标签: android animation android-animation

我有一个复选框,选中时看起来像绿灯,未选中时会闪烁红灯。为此,我创建了一个名为connected_selector.xml的选择器。

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/green_button" />
    <item android:state_checked="false" android:drawable="@drawable/red_button_blinking" />
    <item android:drawable="@drawable/red_button_blinking" />
</selector>

green_button只是一个png而red_button_blinking是png的动画列表。

<?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/red_button" android:duration="500" />
    <item android:drawable="@drawable/red_button_lit" android:duration="500" />
</animation-list>

复选框的背景设置为@ drawable / connected_selector。如果最初取消选中该复选框,则它不会闪烁,只显示@ drawable / red_button。但是,如果我选中该复选框然后取消选中该复选框,则该复选框将正确设置动画。

如何初始化动画,因为复选框最初会取消选中?我想我可以尝试在代码中手动启动动画,但我不认为这是必要的。

1 个答案:

答案 0 :(得分:3)

好吧,我发现了一个丑陋,肮脏的黑客来解决这个问题。请注意,我没有丝毫的线索为什么会发生这种情况,只是解决这个问题。它可能甚至不是通用的方式,因为不同的设备将有不同的加载时间。

我在onPostResume()中执行以下解决方法,以尽量减少必要的延迟时间。

if(onOffStatus) {
    // SLEEP 0.5 SECONDS HERE ...
    new Handler().postDelayed(new Runnable() { 
        public void run() {
            switcher.setBackgroundResource(R.drawable.button_state_anim);

            // Get the background, which has been compiled to an AnimationDrawable object.
            AnimationDrawable frameAnimation = (AnimationDrawable) switcher.getBackground();
            // Start the animation (looped playback by default).
            frameAnimation.start();
        } 
    }, 500); // Actual required time will probably be dependent on device performance
}

这不是很漂亮,但我会一直这样,直到找到更好的东西。如果我在这里忽略了什么,请告诉我。