【问题标题】:AnimationDrawable Error on button click按钮单击时的 AnimationDrawable 错误
【发布时间】:2017-09-06 19:06:13
【问题描述】:

我相信我的 xml 是正确的,但我不确定是什么导致我的代码出现此错误。我正在尝试在 imagebutton 上尝试 animationdrawable,但每次单击按钮时都会出错。

这是我的动画列表“music_icon”:

    <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/selected" android:oneshot="true">
        <item android:drawable="@drawable/musicon1" android:duration="50" />
        <item android:drawable="@drawable/musicon2" android:duration="50" />
        <item android:drawable="@drawable/musicon3" android:duration="50" />
        <item android:drawable="@drawable/musicon4" android:duration="50" />
        <item android:drawable="@drawable/musicon5" android:duration="50" />
    </animation-list>

我的 mainActivity.java:

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.graphics.drawable.AnimationDrawable;


public class HomeScreen extends AppCompatActivity {

ImageButton musicEnable_ImageButton;
Handler musicIcon_animate = new Handler();
int ArrayPos = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_screen);

    musicEnable_ImageButton = (ImageButton) findViewById(R.id.soundEnable_button);
    musicEnable_ImageButton.setBackgroundResource(R.drawable.musicoff);
    musicEnable_ImageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            musicEnable_ImageButton.setBackgroundResource(R.drawable.music_icon);
            final AnimationDrawable frameAnimation = (AnimationDrawable) musicEnable_ImageButton.getBackground();
            frameAnimation.start();
        }
    });
}

我的 layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="wrap_content" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".HomeScreen"
    android:background="@android:drawable/screen_background_dark_transparent"
    android:clickable="true"
    android:id="@+id/homescreen_view">

    <Button
        android:layout_width="100.0dp"
        android:layout_height="25.0dp"
        android:text="Help"
        android:id="@+id/instructionsButton"
        android:layout_alignParentTop="false"
        android:layout_alignParentStart="true"
        android:textColor="#05ffda"
        android:background="@android:color/holo_purple"
        android:longClickable="true" />

    <ImageButton
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:scaleType="centerCrop"
        android:id="@+id/soundEnable_button"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:longClickable="true"
        android:nestedScrollingEnabled="true"/>

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="100dp"
        android:layout_height="25dp"
        android:text="Highscores"
        android:id="@+id/highscores_button"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="@android:color/holo_purple"
        android:textColor="#05ffda" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="100dp"
        android:layout_height="30dp"
        android:text="Play Game"
        android:id="@+id/startGame_button"
        android:background="@android:color/holo_purple"
        android:textColor="#05ffda"
        android:layout_marginTop="175dp"
        android:singleLine="true"
        android:layout_alignParentTop="false"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

以下是错误信息:

06-07 05:00:48.004 19844-19844/com.example.comp.app_name E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.ClassCastException: android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.AnimationDrawable
at com.example.comp.app_name.HomeScreen$1.onClick(HomeScreen.java:36)
at android.view.View.performClick(View.java:4240)
at android.view.View$PerformClick.run(View.java:17721)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

标签: java android android-animation android-imagebutton


【解决方案1】:

两件事:

  1. 改变你的drawable(去掉selector标签):

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/selected" android:oneshot="true">
    <item android:drawable="@drawable/musicon1" android:duration="50" />
    <item android:drawable="@drawable/musicon2" android:duration="50" />
    <item android:drawable="@drawable/musicon3" android:duration="50" />
    <item android:drawable="@drawable/musicon4" android:duration="50" />
    <item android:drawable="@drawable/musicon5" android:duration="50" />
</animation-list>
  1. 我看不到你设置musicEnable_ImageButton的背景,你只是想get它......我错过了什么,还是你只是忘记设置背景?

【讨论】:

  • 原谅我,我是新手,但是“选择器标签”是什么?关于设置背景,“setImageResource”与 setBackgroundResource 有什么不同吗?你能举个例子吗?
  • 如果你将你发布的drawable与我发布的进行比较,你会发现封闭的东西不再是selector,而是animation-list本身。 setImageResourcesetBackgroundResource 是两个完全不同的东西。这是ImageView 的重要组成部分。
  • 删除了选择器标签并更改为 setImageResource,但我仍然遇到同样的错误。
  • “更改为 setImageResource”?
  • 我的原创:最终 AnimationDrawable frameAnimation = (AnimationDrawable) musicEnable_ImageButton.getBackground(); musicEnable_ImageButton.setBackgroundResource(R.drawable.music_icon);我的改变:最终 AnimationDrawable frameAnimation = (AnimationDrawable) musicEnable_ImageButton.getBackground(); musicEnable_ImageButton.setImageResource(R.drawable.music_icon);我觉得我误解了你的第二个建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 2016-04-03
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多