android 动画之 属性动画propertyAnimator(一)
来源:互联网 发布:java有趣的程序 编辑:程序博客网 时间:2024/06/06 14:05
ValueAnimator
ValueAnimator是整个属性动画机制当中最核心的一个类,属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等,确实是一个非常重要的类。
但是ValueAnimator的用法却一点都不复杂,我们先从最简单的功能看起吧,比如说想要将一个值从0平滑过渡到1,时长300毫秒,就可以这样写:
ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);anim.setDuration(300);anim.start();
这样就能从0耗时300毫秒后平滑过渡到了1,这是很简单的例子,当然我们还可以传入多个参数,那么,除了第一个是起始位置,最后一个是结束位置外,中间的其他数据都是过渡数据,例如
ValueAnimator anim = ValueAnimator.ofFloat(0f, 5f, 3f, 0f);anim.setDuration(5000);
anim.start();
这样就是先从0过渡到5,再从5过渡到3,然后在从3过渡到0;耗时5000ms;
还可以对ValueAnimator添加监听器:
<span style="color:#333333;"></span><pre name="code" class="java"><pre name="code" class="java">backGroundColorAutoChangeAnimator.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { // TODO Auto-generated method stub
//动画开始时执行 } @Override public void onAnimationRepeat(Animator animation) { // TODO Auto-generated method stub //重复动画时执行 } @Override public void onAnimationEnd(Animator animation) { // TODO Auto-generated method stub //动画结束执行 } @Override public void onAnimationCancel(Animator animation) { // TODO Auto-generated method stub //取消动画时执行 } }); backGroundColorAutoChangeAnimator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { // TODO Auto-generated method stub ///动画更新时执行 } });
当然也许你并不需要小数位数的动画过渡,可能你只是希望将一个整数值从0平滑地过渡到100,那么也很简单,只需要调用ValueAnimator的ofInt()方法就可以了,如下所示:
ValueAnimator anim = ValueAnimator.ofInt(0, 100);
alueAnimator当中最常用的应该就是ofFloat()和ofInt()这两个方法了,另外还有一个ofObject()方法,
除此之外,我们还可以调用setStartDelay()方法来设置动画延迟播放的时间,调用setRepeatCount()和setRepeatMode()方法来设置动画循环播放的次数以及循环播放的模式,循环模式包括RESTART和REVERSE两种,分别表示重新播放和倒序播放的意思。
ObjectAnimator
相比于ValueAnimator,ObjectAnimator可能才是我们最常接触到的类,因为ValueAnimator只不过是对值进行了一个平滑的动画过渡,但我们实际使用到这种功能的场景好像并不多。而ObjectAnimator则就不同了,它是可以直接对任意对象的任意属性进行动画操作的,比如说View的alpha属性。
不过虽说ObjectAnimator会更加常用一些,但是它其实是继承自ValueAnimator的,底层的动画实现机制也是基于ValueAnimator来完成的,因此ValueAnimator仍然是整个属性动画当中最核心的一个类。那么既然是继承关系,说明ValueAnimator中可以使用的方法在ObjectAnimator中也是可以正常使用的,它们的用法也非常类似,这里如果我们想要将一个TextView在5秒中内从常规变换成全透明,再从全透明变换成常规,就可以这样写:
ValueAnimator backGroundColorAutoChangeAnimator = ObjectAnimator.ofInt(mPaint, "color", Color.WHITE, Color.BLACK);第一个参数是执行动画的对象,通常是View
第二个参数是动画变化的属性,如:textSize,textColor,alpha...通常她的取值是由第一个参数决定,只有当第一个参数中有对应的getter和setter方法后才可以
第三四参数是属性的取值范围,可以不止两个值
动画集合 set
独立的动画能够实现的视觉效果毕竟是相当有限的,因此将多个动画组合到一起播放就显得尤为重要。幸运的是,Android团队在设计属性动画的时候也充分考虑到了组合动画的功能,因此提供了一套非常丰富的API来让我们将多个动画组合到一起。
实现组合动画功能主要需要借助AnimatorSet这个类,这个类提供了一个play()方法,如果我们向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:
- after(Animator anim) 将现有动画插入到传入的动画之后执行
- after(long delay) 将现有动画延迟指定毫秒后执行
- before(Animator anim) 将现有动画插入到传入的动画之前执行
- with(Animator anim) 将现有动画和传入的动画同时执行
ValueAnimator backGroundColorAutoChangeAnimator = ObjectAnimator.ofInt(mPaint, "color", Color.WHITE, Color.BLACK); // backGroundColorAutoChangeAnimator.setDuration(10000); backGroundColorAutoChangeAnimator.setEvaluator(new ArgbEvaluator()); backGroundColorAutoChangeAnimator.setRepeatCount(ValueAnimator.INFINITE); backGroundColorAutoChangeAnimator.setRepeatMode(ValueAnimator.REVERSE); // backGroundColorAutoChangeAnimator.start(); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether(s1, backGroundColorAutoChangeAnimator);// 并行 animatorSet.setDuration(5000); // animatorSet.play(animator).with(backGroundColorAutoChangeAnimator); animatorSet.start();playTogether();和给定的动画同事执行,可以是一组动画。对应的还有一个顺序执行的方法:
animatorSet.playSequentially();于给定的动画一次执行。
1 0
- android 动画之 属性动画propertyAnimator(一)
- propertyAnimator(属性动画)之objectanimator(动画执行类)
- propertyanimator(属性动画)之valuesanimator(动画执行类)
- Android 动画之属性动画(一)
- Android动画之属性动画(Property Animation)(一)
- Android之属性动画(一)
- Android之属性动画(一)
- Android动画--属性动画总结(一)
- Android动画机制-属性动画(一)
- Android动画之属性动画(二)
- Android动画之属性动画(上)
- Android动画之属性动画(下)
- Android动画之属性动画(四)
- Android 属性动画 (一)
- Android 属性动画(一)
- 动画[3]PropertyAnimator ValueAnimator
- 动画[4]PropertyAnimator ObjectAnimator
- 动画[5]PropertyAnimator AnimatorSet
- Android多屏幕适配资源生成
- python 快速排序
- 今天创建博客了
- mysql insert_select ID 自增长
- 斯坦福机器学习课程 Exercise 习题二
- android 动画之 属性动画propertyAnimator(一)
- atitit.网络文件访问协议.unc smb nfs ftp http的区别
- iOS 从摄像头获取YUV420SP数据
- sqlite基础语法
- bootstrap学习网站
- MapReduce Kmeans聚类算法
- 在项目中常见的问题,是时候总结点常见的小的问题了
- Ext.js5的数组表格(3)
- Atitit.论图片类型 垃圾文件的识别与清理 流程与设计原则 与api概要设计 v2 pbj