微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按钮在Android中将背景显示为AnimationDrawable

我已经在 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();
  }
}

原文地址:https://www.jb51.cc/android/316617.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐