您的位置:首页 > 移动开发 > Android开发

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

2015-10-27 00:16 465 查看
(内容来源于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);
}


未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  读书笔记