Android动画Animator开发问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android动画Animator开发问题相关的知识,希望对你有一定的参考价值。


在开发android的Animator时遇到如下问题:

1. 关于Animator的循环播放:

         Animator动画中有循环的设置方法setRepeatCount(ValueAnimator.INFINITE) , 而对于AnimatorSet需要实现循环播放,实现方法如下代码:

private AtomicBoolean isStart = new AtomicBoolean(false);


animatorSet.addListener(new Animator.AnimatorListener() {    
  @Override    
  public void onAnimationStart(Animator animation) {
  
  }
      
  @Override    
  public void onAnimationEnd(Animator animation) {        
      if (isStart.get()) {            
         animation.start();
      }
  }
      
  @Override    
  public void onAnimationCancel(Animator animation) {
  
  }
  
  @Override    
  public void onAnimationRepeat(Animator animation) {
      
  }
});
animatorSet.start();

public void stopRecognizerViewAnim() {
    isStart.set(false);
}

 

2 . 关于View的缩放: 

 

  对于View的缩放一般使用scale。如果缩放的是GroupView,则内部的组件也随着缩放。如果不希望缩放内部的view,而仅仅是宽度或高度的缩放, 实现方法如下代码: 


mAnimatorSet = new AnimatorSet();
ValueAnimator height = ValueAnimator.ofObject(new WidthEvaluator(), mCurrWidth, mPreWidth);
height.setDuration(DURATION);
mAnimatorSet.playTogether(height);
mAnimatorSet.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
        
    }
    @Override
    public void onAnimationEnd(Animator animation) {
        
    }
    @Override
    public void onAnimationCancel(Animator animation) {
    }
    @Override
    public void onAnimationRepeat(Animator animation) {
    }
});
mAnimatorSet.start();


private class WidthEvaluator extends IntEvaluator {
    @Override
    public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
        int value = super.evaluate(fraction, startValue, endValue);
        ViewGroup.LayoutParams layoutParams = getLayoutParams();
        layoutParams.width = value;
        setLayoutParams(layoutParams);
        return value;
    }
}


3. 如果同一个AnimatorSet中多个Animator需要设置before() 或者after() ,不能再同一个AnimatorSet中设置多个before() 或者after()。例如: play(AAnimator).before(BAnimator).before(CAnimator).. 是错误的。 这个是我个人的理解,如果不正确,请留言告知。



本文出自 “Android - 静心之作” 博客,请务必保留此出处http://6246534.blog.51cto.com/6236534/1860430

以上是关于Android动画Animator开发问题的主要内容,如果未能解决你的问题,请参考以下文章

Unity - Animator组件

Unity - Animator组件

Unity -- Animation(旧版动画组件)和Animator(新版动画器组件)

Animator 动画第一次播放正常,之后播放都不正常的问题解决

android之animator 和animation 的区别

Android资源文件夹anim和animator文件夹的区别