我已经在
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 ...
有关如何解决此问题的任何想法?谢谢.
解决方法
您正在进行错误的转换 – 您的背景可绘制是StateListDrawable,而不是AnimationDrawable.我宁愿做类似的事情:
@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); btn = (Button)findViewById(R.id.btnAnim); StateListDrawable background = (StateListDrawable) btn.getBackground(); Drawable current = background.getCurrent(); if (current instanceof AnimationDrawable) { btnAnimation = (AnimationDrawable) current; btnAnimation.start(); } }