2016-06-07 75 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