Android开发:创建骰子滚动Drawable动画遇animation-list类找不到问题
解决Android中
animation-list类找不到的问题 嘿,我帮你定位到问题的核心了!你遇到的ClassNotFoundException是因为系统错误地把animation-list当成了一个Android View组件来加载,但实际上**animation-list是Drawable动画资源,不是View类**,不能直接在布局XML里作为标签使用。下面是具体的修复步骤:
1. 确认动画资源文件的存放位置
把你的动画XML文件(建议重命名为dice_roll_animation.xml,方便识别)放在res/drawable/目录下,绝对不能放在res/layout/目录里——布局目录是放界面布局文件的,Drawable资源要放在drawable目录下。你的动画XML内容本身是正确的,不用修改:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item android:drawable="@drawable/roll1" android:duration="200" /> <item android:drawable="@drawable/roll2" android:duration="200" /> <item android:drawable="@drawable/roll3" android:duration="200" /> <item android:drawable="@drawable/roll4" android:duration="200" /> <item android:drawable="@drawable/roll5" android:duration="200" /> <item android:drawable="@drawable/roll6" android:duration="200" /> <item android:drawable="@drawable/roll7" android:duration="200" /> <item android:drawable="@drawable/roll8" android:duration="200" /> <item android:drawable="@drawable/roll9" android:duration="200" /> <item android:drawable="@drawable/roll10" android:duration="200" /> <item android:drawable="@drawable/roll11" android:duration="200" /> <item android:drawable="@drawable/roll12" android:duration="200" /> </animation-list>
2. 修正布局XML的引用方式
打开你的activity_dice_rolling.xml布局文件,找到对应的ImageView,通过android:background属性引用这个动画Drawable,而不是把<animation-list>直接写在布局里。示例代码:
<ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/dice_roll_animation" />
3. 调整Activity中的代码逻辑
你当前的代码里用setImageResource(R.drawable.roll1)会覆盖掉ImageView的背景动画,所以要删掉这行,直接获取背景的AnimationDrawable:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dice_rolling); // 获取ImageView实例 diceView = findViewById(R.id.imageView); // 直接获取背景的动画Drawable,不用提前设置静态图片 rollAnimation = (AnimationDrawable) diceView.getBackground(); handleRollButton(); }
4. 额外优化建议
- 如果你希望动画播放结束后停在某个特定的骰子图片,可以把动画XML的最后一个
item换成你想要的静态骰子图;或者在动画结束后手动设置ImageView的资源。 - 如果你需要循环播放动画,把XML里的
android:oneshot="true"改成android:oneshot="false"。 - 确保
roll1到roll12所有图片资源都正确存放在res/drawable/目录,没有拼写错误。
按照这些步骤调整后,你的骰子滚动动画应该就能正常运行了!
内容的提问来源于stack exchange,提问作者Van
相关产品推荐
相关产品推荐

