我在 Android 中制作自定义按钮已经有一段时间了。事情很简单,只需为按钮状态制作图像资源并为其制作一个选择器。一切都很顺利而且美好。现在我遇到了新的情况。
我制作了一个可绘制的动画并将其设置为按钮的背景。
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@drawable/frame1" android:duration="600" />
<item android:drawable="@drawable/frame2" android:duration="300" />
<item android:drawable="@drawable/frame3" android:duration="500" />
</animation-list>
如果我将动画设置为按钮的背景,它就可以正常工作。如果我尝试制作一个简单的选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="false"
android:drawable="@drawable/animation" />
<item
android:state_pressed="true"
android:drawable="@drawable/pressed" />
</selector>
按钮的正常状态将以动画作为背景,而按下状态以静态图像为背景,则事情无法正常工作。
在我的主要活动中,在 onWindowFocus 上我获取按钮背景并开始动画
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
btn = (Button)findViewById(R.id.btnAnim);
btnAnimation = (AnimationDrawable) btnAnim.getBackground();
btnAnimation.start();
}
这似乎是问题所在,因为我的动画无法从选择器中正确获取,并且出现以下错误:
03-14 15:21:16.146: ERROR/AndroidRuntime(440): FATAL EXCEPTION: main
03-14 15:21:16.146: ERROR/AndroidRuntime(440): java.lang.ClassCastException: android.graphics.drawable.StateListDrawable
03-14 15:21:16.146: ERROR/AndroidRuntime(440): at com.bebenjoy.MainActivity.onWindowFocusChanged(MainActivity.java:53)
03-14 15:21:16.146: ERROR/AndroidRuntime(440): at ...
关于如何解决这个问题有什么想法吗?谢谢。