Java 单击按钮时出现AnimationDrawable错误

Java 单击按钮时出现AnimationDrawable错误,java,android,android-animation,android-imagebutton,Java,Android,Android Animation,Android Imagebutton,我相信我的xml是正确的,但我不确定是什么原因导致了代码中的这个错误。我试图在imagebutton上尝试animationdrawable,但每次单击按钮时都会出错 这是我的动画列表“音乐图标”: my layout.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" androi

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

这是我的动画列表“音乐图标”:

my 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>
2件事:

  • 更改您的可绘图项(删除
    selector
    tag):
  • 
    
  • 我看不到您正在设置
    musicEnable\u ImageButton
    的背景,您只想
    获取它。。。是我遗漏了什么,还是你一开始就忘了设置背景

  • StateListDrawable无法强制转换为android.graphics.drawable.AnimationDrawable
    请原谅,我是新手,但“选择器标签”是什么?关于背景设置,“setImageResource”与setBackgroundResource是否不同?你能提供一个例子吗?如果你把你发布的drawable与我发布的drawable进行比较,你会发现封装的东西不再是
    选择器
    ,而是
    动画列表
    本身
    setImageResource
    setBackgroundResource
    是两个完全不同的东西。这是
    ImageView
    的一个重要部分。删除了选择器标记并更改为setImageResource,但我仍然收到相同的错误。“更改为setImageResource”?我的原始:final AnimationDrawable frameAnimation=(AnimationDrawable)musicEnable_ImageButton.getBackground();musicEnable_ImageButton.setBackgroundResource(R.drawable.music_图标);我的更改:final AnimationDrawable frameAnimation=(AnimationDrawable)musicEnable_ImageButton.getBackground();musicEnable_ImageButton.setImageResource(R.drawable.music_图标);我觉得我误解了你的第二个建议。
    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();
            }
        });
    }
    
    <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)
    
    <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>