2016-06-07 71 views
1

我相信我的xml是正确的,但我不确定在我的代码中导致此错误的原因。我试图在一个imagebutton上尝试animationdrawable,但每次点击我的按钮时都会出现错误。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:

​​

下面是错误信息:

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) 
+0

'StateListDrawable不能转换到android.graphics.drawable.AnimationDrawable' –

+0

http://stackoverflow.com/questions/5299219/button-states-with-background-as-animationdrawable-in-android –

回答

1

两件事:

  1. 更改您的绘制(删除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> 
  • 我看不到你的设置musicEnable_ImageButton的背景,你只是试图get它...我错过了什么,或者你只是忘记在冷杉中设置背景st place?
  • +0

    原谅我,我对此很陌生,但是“选择器标签”是什么?关于设置背景,“setImageResource”与setBackgroundResource有什么不同?你能提供一个例子吗? – 1QuickQuestion

    +0

    如果你比较你发布的drawable和我发布的drawable,你会发现封闭的东西不再是'selector',而是'animation-list'本身。 'setImageResource'和'setBackgroundResource'是两个完全不同的东西。这是'ImageView'的重要组成部分。 –

    +0

    删除了选择器标签并更改为setImageResource,并且仍然收到相同的错误。 – 1QuickQuestion