Android读书笔记------View动画(2)

(内容来源于Android开发艺术探索)
一 理解插值器和估值器
1.插值器TimeInterpolator:根据时间流失的百分比计算出当前属性值改变的百分比。
2.估值器 TypeEvaluator:根据当前属性值改变的百分比,计算出改变后的属性值

它们是实现非匀速动画的重要手段。自定义1需要实现Interpolator或者TimeInterpolator。自定义2需要实现TypeEvaluator。

二丶对任意View的属性做动画。
对任意控件的某一属性做动画是有条件的。
1.首先该控件的该属性 需要有get set方法。因为属性动画会根据外界传入的值,不断的调用它的set方法,重新设置新的值,使其逐渐靠近目标值。
2.通过该属性设对UI进行改变能有直观的效果。例如,改变宽高,位置。
注意:以上两个条件缺一不可。

当该属性没有get,set方法时,可以采用两种方式:

1.用一个类包装该View

 private class ViewWrapper{
      private View mTarget;
      public ViewWrapper(View mTarget){
          this.mTarget=mTarget;
      }
      //有价值的任意属性 
      public int getWidth(){
          return mTarget.getLayoutParams().width;
      }
      public void setWidth(int width){
          mTarget.getLayoutParams().width=width;
          mTarget.requestLayout();
      }
  }
  ViewWrapper target=new ViewWrapper(mButton);
ObjectAnimation.ofInt(target,"width",500)...  

2.采用属性动画监听

private void domyAnimation(final View target,final int startInt,final int endInt){
     ValueAnimator valueAnimator=ValueAnimator.ofInt(1, 100);
     valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
         //根据估值器计算出 改变后属性
         private IntEvaluator intEvaluator=new IntEvaluator();
         @Override
         public void onAnimationUpdate(ValueAnimator animation) {
             //获得当前的进度值
             int currentValue= (Integer) animation.getAnimatedValue();
             //得到当前进度在整个动画中的比例
            float fraction=animation.getAnimatedFraction();
             //根据该比例改变view的某个属性
             target.getLayoutParams().width=intEvaluator.evaluate(fraction,startInt,endInt);
             target.requestLayout();
         }
     });
     valueAnimator.setDuration(500).start();
 }
mButton.onClickListener(..){
  domyAnimation(targetView,100,200);
}

未完待续

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值