Android动画Animator开发问题

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

1. 关于Animator的循环播放:

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

1
private  AtomicBoolean isStart =  new  AtomicBoolean( false );


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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,而仅仅是宽度或高度的缩放, 实现方法如下代码: 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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();


1
2
3
4
5
6
7
8
9
10
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).. 是错误的。 这个是我个人的理解,如果不正确,请留言告知。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值