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

Android 属性动画进阶总结篇(篇4)

2016-10-08 22:57 417 查看

前言:学习了郭霖大神的 属性动画高级用法相关的博客,在学习的同时也顺便做笔记

1.在文章的开始首先贴上郭霖 大神关于 属性动画高级用法相关的博客地址:

http://blog.csdn.net/sinyu890807/article/details/44171115

2.总结下所学习的技术点:

在篇2博文中记录了系统提供的一部分 “时间差值器”, 这里再深入学习下:

系统默认的时间差值器 为 AccelerateDecelerateInterpolator这一实现类,看下面源码截图



系统提供的属性动画的各类差值器中都继承自BaseInterpolator类,而BaseInterpolator类实现于Interpolator接口,Interpolator接口继承自TimeInterpolator接口(targetSdkVersion 23) , 就是这么一系列的继承实现关系,可以看到在TimeInterpolator接口中只有 “getInterpolation”这个方法,在系统提供的各类差值器中皆有对该 “getInterpolation”方法 不同的实现,当系统提供的不满足需求的时候,可以实现自定义的差值器.

差值器的自定义实现可以参考郭神 的博客,绝对让你受宠若惊!!

TimeInterpolator(时间差值器)根据流逝的时长百分比计算出当前属性值改变的百分比,而 篇3 学到的TypeEvaluator(类型估值算法,即估值器)则根据时间差值器计算得到的属性百分比来计算当前属性改变的值并且返回, 主要的api有

/**
* 系统提供的时间差值器,自定义差值器可以实现Interpolator 或 TimeInterpolator,
* 重写其getInterpolation方法
*/
public class LinearInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {

public LinearInterpolator() {
}

public LinearInterpolator(Context context, AttributeSet attrs) {
}

public float getInterpolation(float input) {
return input;
}

/** @hide */
@Override
public long createNativeInterpolator() {
return NativeInterpolatorFactoryHelper.createLinearInterpolator();
}
}

/**
* 系统提供的估值器,自定义估值器可以实现TypeEvaluator,重写其evaluate方法
*/
public class IntEvaluator implements TypeEvaluator<Integer> {

public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
int startInt = startValue;
return (int)(startInt + fraction * (endValue - startInt));
}
}


关于属性动画ViewPropertyAnimator的用法

由于大多数时候仍然是对View进行动画操作的,所以为了更加简便灵活的实现动画,ViewPropertyAnimator可以帮我们一行代码简单实现,看下我们之前实现动画的写法:

ObjectAnimator translationX = ObjectAnimator.ofFloat(view, "translationX", 0, 500F);
translationX.setInterpolator(new AccelerateDecelerateInterpolator());
translationX.setDuration(300);
translationX.start();


上面的code虽在api的展示上已经非常简洁,是不是并不好理解,再看下下面的代码,实现的动画效果和上面一样:

ViewPropertyAnimator.animate(view).translationX(500)
.setInterpolator(new AccelerateDecelerateInterpolator())
.setDuration(300);


上面的code在展示上更加简洁,而且非常容易理解,animate方法需要传入一个View对象,然后返回ViewPropertyAnimator对象,紧接着对ViewPropertyAnimator对象 进行动画效果/时间差值器/动画执行时长/等等的设置,每个api的返回结果都是ViewPropertyAnimator 对象,设置完成之后也不用start动画,系统会帮我们隐式启动动画. 就是这么的爽歪歪…

可以使用连缀的写法将动画集合起来,动画效果同时执行

ViewPropertyAnimator.animate(null).x(100).y(100)
.rotation(200).alpha(0)
.setDuration(100);


3.总结:

1.了解属性动画差值器,以及差值器和估值器的用处以及如何协同工作;

2.了解ViewPropertyAnimator的用法,简洁易懂;

3.假期结束的第1天,时间差还没回过神来 …郁闷

属性动画类别的的博文:

属性动画与补间动画总结篇(篇1): http://blog.csdn.net/yk377657321/article/details/52683094

Android 属性动画进阶篇(篇2): http://blog.csdn.net/yk377657321/article/details/52746328

Android 属性动画进阶总结篇(篇3): http://blog.csdn.net/yk377657321/article/details/52761211

Android 属性动画进阶总结篇(篇4):http://blog.csdn.net/yk377657321/article/details/52761453
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: