2012-06-21 73 views
0

時,我有一個擴展android.view.Animation類:的java:ClassCastException異常上溯造型動畫CustomAnimation

package diffusi.on.com.fifteen_puzzle; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 

public class CustomAnimation extends Animation { 

    private boolean _isLast = false; 

    private View _currentTarget = null; 

    public interface AnimationListener { 
     void onAnimationEnd(CustomAnimation animation); 
     void onAnimationRepeat(CustomAnimation animation); 
     void onAnimationStart(CustomAnimation animation); 
    } 

    public static void animateSetOfViews(
      View[] viewsSet, 
      int animResId, 
      int[] startTimeOffsets, 
      Context context, 
      AnimationListener animationListener 
     ) { 
     CustomAnimation animation; 
     int startTimeOffset; 
     boolean isLastAnim; 

     for (int intA = 0; intA < viewsSet.length; intA++) { 
      isLastAnim = intA == viewsSet.length - 1; 
      animation = (CustomAnimation) AnimationUtils.loadAnimation(context, animResId); 
      if (intA <= startTimeOffsets.length - 1) { 
       startTimeOffset = startTimeOffsets[intA]; 
      } else startTimeOffset = 0; 
      animation.applyToView(viewsSet[intA], startTimeOffset, isLastAnim, animationListener); 
     } 
    } 

    public CustomAnimation() { 

    } 

    public CustomAnimation(Context context, AttributeSet attrs) { 
     super(context, attrs); 

    } 

    public boolean isLast() { 
     return this._isLast; 
    } 

    public View getCurrentTarget() { 
     return this._currentTarget; 
    } 

    private void applyToView(View view, int startTimeOffset, boolean isLast, AnimationListener listener) { 
     this._isLast = isLast; 
     this._currentTarget = view; 
     this.setStartOffset(startTimeOffset); 
     this.setAnimationListener((Animation.AnimationListener) listener); 
     this._currentTarget.startAnimation(this); 
    } 

} 

它編譯在IDE中沒有錯誤。但在runtame,它在網上拋出一個異常(ClassCastEcxeption): 動畫=(CustomAnimation)AnimationUtils.loadAnimation(背景下,animResId)

爲什麼我不能上溯造型動畫實例我CustomAnimation,它擴展了動畫?

+0

您可以發佈方法loadAnimation。 –

+0

我可以添加到AnimationUtils.loadAnimation(context,animResId)的日誌結果中,並查看發生此問題的原因。 –

回答

3

這不是上傳,它是向下廣播。上傳將採用CustomAnimationAnimation的格式。

想必AnimationUtils.loadAnimation返回一個對象的引用,其中不是實際上是一個CustomAnimation - 所以你不能投到它。只有在執行時對象的實際類型與要投射到的類型兼容時,才能轉換爲類型。例如:

Object x = new Integer(10); 
String y = (String) x; // Bang - invalid cast 

Object a = "Foo"; 
String b = (String) a; // This is fine 
+0

謝謝。術語錯誤 – user1471240