永发信息网

objectanimator和valueanimator有什么区别

答案:3  悬赏:40  手机版
解决时间 2021-03-06 07:01
objectanimator和valueanimator有什么区别
最佳答案
首先介绍下二者:
一,使用ObjectAnimator实现动画

该类作为ValueAnimator的子类不仅继承了ValueAnimator的所有方法和特性,并且还封装很多实用的方法,方便开发人员快速实现动画。同时,由于属性值会自动更新,使用ObjectAnimator实现动画不需要像ValueAnimator那样必须实现 ValueAnimator.AnimatorUpdateListener ,因此实现任意对象的动画显示就更加容易了。我们在大部分的开发工作中,都会使用ObjectAnimator而非ValueAnimator实现我们所需的动画效果。
(1) translationX 和 translationY:这两个属性控制着 View 的屏幕位置坐标变化量,以 layout 容器的左上角为坐标原点;
(2) rotation、rotationX 和 rotationY:这三个属性控制着 2D 旋转角度(rotation属性)和围绕某枢轴点的 3D 旋转角度;
(3) scaleX、scaleY:这两个属性控制着 View 围绕某枢轴点的 2D 缩放比例;
(4) pivotX 和 pivotY: 这两个属性控制着枢轴点的位置,前述的旋转和缩放都是以此点为中心展开的,缺省的枢轴点是 View 对象的中心点;
(5) x 和 y:这是指 View 在容器内的最终位置,等于 View 左上角相对于容器的坐标加上 translationX 和 translationY 后的值;
(6)alpha:表示 View 的 alpha 透明度。缺省值为 1 (不透明),为 0 则表示完全透明(看不见);
要动画显示 View 对象的某个属性,比如颜色或旋转值,我们所有要做的事情就是创建一个 Property animation,并设定对应的 View 属性。那接下来我们就用ObjectAnimator类来分别实现View的透明度渐变、收缩、移动和旋转等动画效果,那在此之前我们也来总结下使用ObjectAnimator实现动画的几个步骤,如下:
1.通过调用ofFloat()、ofInt()等方法创建ObjectAnimator对象,并设置目标对象、需要改变的目标属性名、初始值和结束值;
2.设置动画的持续时间、是否重复及重复次数等属性;
3.启动动画。
二,使用ValueAnimator实现动画
ValueAnimator是Property Animation系统的核心类,它包含了配置Property Animation属性的大部分方法,那要实现一个Property Animation,都需要直接或间接使用ValueAnimator类。那接下来我们将借助ValueAnimator类提供的方法来实现各种各样的动画效果,不过在此之前我们来学习一下实现动画的几个关键知识点。
使用ValueAnimator实现动画的步骤及实践
那一般使用ValueAnimator实现动画分为以下七个步骤:
1. 调用ValueAnimation类中的ofInt(int...values)、ofFloat(String propertyName,float...values)等静态方法实例化ValueAnimator对象,并设置目标属性的属性名、初始值或结束值等值;
2.调用addUpdateListener(AnimatorUpdateListener mListener)方法为ValueAnimator对象设置属性变化的监听器;
3.创建自定义的Interpolator,调用setInterpolator(TimeInterpolator value)为ValueAniamtor设置自定义的Interpolator;(可选,不设置默认为缺省值)
4.创建自定义的TypeEvaluator,调用setEvaluator(TypeEvaluator value)为ValueAnimator设置自定义的TypeEvaluator;(可选,不设置默认为缺省值)
5.在AnimatorUpdateListener 中的实现方法为目标对象的属性设置计算好的属性值。
6.设置动画的持续时间、是否重复及重复次数等属性;
7.为ValueAnimator设置目标对象并开始执行动画。
不过呢使用ObjectAnimator实现动画也有一些要求和限制,一般有以下几点需要注意:
1.动画显示的属性必须带有一个 setter 方法(以骆驼拼写法命名),格式类似 set<propertyName>()。 因为 ObjectAnimator 会在动画期间自动更新属性值,它必须能够用此 setter 方法访问到该属性。 例如:假设属性名称为foo,则需要有一个setFoo()方法。 而你如果此 setter 方法不存在,那么我们可以有以下三种选择:
<1>如果权限允许的话,直接在类中增加此 setter 方法;
<2>修改封装类来增加此 setter 方法,并让该封装类来接收属性值并传给初始的对象;
<3>换用 ValueAnimator。
2.如果在调用 ObjectAnimator 的某个工厂方法时,我们只为 values... 参数指定了一个值,那此值将被认定为动画属性的结束值。 这样的话,动画显示的属性必须带有一个 getter 方法,用于获取动画的起始值。 此 getter 方法必须以get<propertyName>()的格式命名。 例如:假设属性名为foo,则需要有一个getFoo()方法。
3.动画属性的 getter 方法(如果必要的话)和 setter 方法所操作数据的类型必须与 ObjectAnimator 中设定的起始和结束值相同。
以上不难看出二者的区别了。
全部回答
“马德里”是地名同时也是西班牙的首都,而“皇家马德里”则是西班牙的一个足球俱乐部名称,位于西班牙首都“马德里”。这个足球俱乐部之前的名字是马德里足球队,之后获国王赐封“皇家”的尊称,最后改名为“皇家马德里”足球俱乐部。
Objectanimator是Valueanimator的子类
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎么提高资产负债率
雪梅超市鸳鸯店我想知道这个在什么地方
18世纪法国思想家孟德斯鸠在《论法的精神》一
阡陌飞絮缱绻意,旧曲重弹也枉然什么意思
昨晚做了好多梦,很乱,还能到一条超大的蛇,
圆通速北城分公司地址在哪,我要去那里办事
2016年新阳光最新报价
《海的女儿》、《丑小鸭》、《卖火柴的小女孩
华盛超市这个地址在什么地方,我要处理点事
dnf8周年跨界石能跨80史诗吗
明星志愿2里NP鸡病了怎么办
甜心英语绘本下载
1美元等于多少令吉
作为女生,你们会选一米八的丑男还是一米六的
苹果手机怎么屏蔽手机系统更新 iPhone屏蔽i
推荐资讯
2012年B村总支出中,用于新建老年活动室6万元
她这样到底算是认真的?还是玩玩而已的?(10
猫鼠狗 鲁迅在哪可免费阅读?
重钢结构钢柱可不可以焊接?
顺隆家具城A厅北2门这个地址在什么地方,我要
蓝色,紫色,粉色,绿色那种最漂亮?
摩托车压力轴承怎么调整过小坑或者铁路道口的
吟诗的吟是什么意思
周公解梦梦见自己的妈妈摔倒头流血
卧龙区总工会困难职工帮扶中心地址在哪,我要
吉林大学企业管理考研
电脑键盘按键出现滴滴声怎么弄没
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?