我有一个复选框,选中时看起来像绿灯,未选中时会闪烁红灯。为此,我创建了一个名为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。但是,如果我选中该复选框然后取消选中该复选框,则该复选框将正确设置动画。
如何初始化动画,因为复选框最初会取消选中?我想我可以尝试在代码中手动启动动画,但我不认为这是必要的。
答案 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
}
这不是很漂亮,但我会一直这样,直到找到更好的东西。如果我在这里忽略了什么,请告诉我。