2015-02-06 99 views
2

我想使用動畫來縮放圖像。但它似乎也有一些問題,我不知道爲什麼會出現....android取消動畫導致stackoverflow錯誤

請幫我解決這個問題...

imgAlpha.setOnLongClickListener(new OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        // TODO Auto-generated method stub 

        List<Animator> animations = new ArrayList<Animator>(); 
        animations.add(ObjectAnimator.ofFloat(imgAlpha, 
          View.SCALE_X, 2).setDuration(800)); 
        animations.add(ObjectAnimator.ofFloat(imgAlpha, 
          View.SCALE_Y, 2).setDuration(800)); 
        final AnimatorSet animatorSet = new AnimatorSet(); 
        animatorSet.playTogether(animations); 
        animatorSet.start(); 
        animatorSet.setDuration(800); 
        animatorSet.addListener(new AnimatorListener() { 

         @Override 
         public void onAnimationStart(Animator animation) { 
          // TODO Auto-generated method stub 

         } 

         @Override 
         public void onAnimationRepeat(Animator animation) { 
          // TODO Auto-generated method stub 

         } 

         @Override 
         public void onAnimationEnd(final Animator animation) { 
          // TODO Auto-generated method stub 
          // TODO Auto-generated method stub 
          Logger.error("end animation"); 
          animatorSet.cancel(); 
          imgAlpha.clearAnimation(); 
         } 

         @Override 
         public void onAnimationCancel(Animator animation) { 
          // TODO Auto-generated method stub 
          Logger.error("calcel animation"); 
         } 
        }); 
        return true; 
       } 
      }); 

我不知道什麼時候會在最終的動畫錯誤。請幫我

UPDATE:

OBJECT ANIMATOR CAN NOT用作其他動畫,它不能返回到原始大小如我所料。我想,如果其他人知道如何解決它,請教我出問題。很多謝謝

回答

0

AnimatorSet.end()火災onAnimationEnd(Animator)因此遞歸。

documentation

結束動畫。這會導致動畫指定被動畫屬性的最終值,然後在其偵聽器上調用onAnimationEnd(Animator)方法。

+0

對不起,我只是更新代碼,我只是調用cancel()動畫。 – kemdo 2015-02-06 04:19:50

+0

@kemdo'AnimatorSet.cancel()'也調用'onAnimationEnd(Animator)'。你必須從'onAnimationEnd'中移除'animatorSet.cancel();'。 – Suzi 2015-02-06 04:23:13

+0

oke我把它刪除了,但是我怎麼才能把圖像的大小調整到原始大小..... – kemdo 2015-02-06 04:25:49

2
@Override 
       public void onAnimationEnd(final Animator animation) { 
        // TODO Auto-generated method stub 
        // TODO Auto-generated method stub 

        Log.e("error", "end animation"); 
        **// animatorSet.cancel();** 
        img.clearAnimation(); 
       } 



package com.example.count; 

import java.util.ArrayList; 
import java.util.List; 

import android.animation.Animator; 
import android.animation.Animator.AnimatorListener; 
import android.animation.AnimatorSet; 
import android.animation.ObjectAnimator; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnLongClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 

public class main extends Activity{ 
    Button b1; 
    ImageView img; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.first); 
    img=(ImageView)findViewById(R.id.imageView1); 
    img.setOnLongClickListener(new OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 

      List<Animator> animations = new ArrayList<Animator>(); 
      animations.add(ObjectAnimator.ofFloat(img, 
        View.SCALE_X, 2).setDuration(800)); 
      animations.add(ObjectAnimator.ofFloat(img, 
        View.SCALE_Y, 2).setDuration(800)); 
      final AnimatorSet animatorSet = new AnimatorSet(); 
      animatorSet.playTogether(animations); 
      animatorSet.start(); 
      animatorSet.setDuration(800); 
      animatorSet.addListener(new AnimatorListener() { 

       @Override 
       public void onAnimationStart(Animator animation) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onAnimationRepeat(Animator animation) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onAnimationEnd(final Animator animation) { 
        // TODO Auto-generated method stub 
        // TODO Auto-generated method stub 

        Log.e("error", "end animation"); 
        // animatorSet.cancel(); 
        img.clearAnimation(); 
       } 

       @Override 
       public void onAnimationCancel(Animator animation) { 
        // TODO Auto-generated method stub 

        Log.e("error", "calcel animation"); 
       } 
      }); 
      return true; 
     } 
    }); 
} 
} 
+0

你是什麼意思? – kemdo 2015-02-06 04:40:54

+0

我只是刪除了這段代碼animatorSet.cancel();從你的代碼它運行良好 – 2015-02-06 04:42:57

+0

我之前試過了,它不工作。該圖像不能回到原來的大小.... – kemdo 2015-02-06 04:43:52