2015-02-06 105 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