Android 属性动画ObjectAnimator和ValueAnimator讲解
区别:
ObjectAnimator 是直接对某个view进行更改。
ValueAnimator 根据 TimeInterpolator 在不断产生相应的数据,来传进view ,view自己做改变。
介绍:
1.属性动画是通过改变某个控件的属性值来创造动画,比如在规定的时间内改变某个控件的X坐标,则会产生一个平移的动画效果。
2.坚持使用属性动画和帧动画,而不要使用补间动画,补间动画会造成控件移动到目的地但是控件的热点(产生事件的范围)仍然在原地
3.属性动画几乎可以产生一切你想要的效果,一般在插入动画时,默认为匀速从起点到终点,可以通过插值改变从起点到终点的效果
4.属性动画分为ObjectAnimator和ValueAnimator,其中ObjectAnimator是继承于ValueAnimator
ObjectAnimator:
对控件的某个属性执行一次动画。
1.通过 ObjectAnimator.ofFloat(<控件句柄>,<控件属性>,<从什么float值>,<到什么float值>).setDuration(1000).start();来创建一次动画。
其中ofFloat是根据后面属性值的类型设置的。如果是整型,可以设置为ofInt
如果有多个这样的,一次执行并不会分先后顺序,是一起执行,包括对同一控件的操作,因为设置动画并不会阻碍主线程。
2.为了是属性复用化,节省代码操作,我们把对控件的一组属性的一次操作提取出来称为一个属性操作集,比如,我想对控件进行平移和旋转,我们可以先把
平移和旋转(以及他们操作的数值)单独拿出来作为一个属性,然后控件调用这个动画集,就可以实现无论什么控件都可以公用这个属性动画。
操作:通过 PropertyValuesHolder pro = PropertyValuesHolder.ofFloat("translationX",0F,100F);封装平移X的动画
然后PropertyValuesHolder pro2 = PropertyValuesHolder.ofFloat("rotation",0F,360F);封装旋转360的动画
最后通过ObjectAnimator.ofPropertyValuesHolder(<控件句柄>,pro,pro1,pro2);来为某个控件设置以上动画,其他控件也可
复用以上代码
3.以上只是说明了对控件的多个属性一次操作,并没有说明控件属性改变的先后顺序,以及对多个控件一起操作。这是我们引入了AnimatorSet
先实例化这个属性动画集合 AnimatorSet set = new AnimatorSet().
通过set.play(<animator1>).with(<animator2>);来表示让Animator1和Animator2一起执行,
通过set.play(<animator1>).after(<animator2>)来表示让Animator1在Animator2后执行
通过set.play(<animator1>).before(<animator2>)来表示让Animator1在Animator2之前执行、
其中Animator1和Animator2都可以填充ObjectAnimator。这样就可以对某个控件的先后顺序和对多个控件的动画配合起到至关作用
4.以上所表示的动画都是将某个属性从一个值匀速的改变成另一个值。
我们可以用set.setInterpolator();来设置一个改变的效果。里面只要new 一个Interpolator方可,
比如:set.setInterpolator(new AccelerateInterpolator());
ValueAnimator:
1.ValueAnimator并不会改变属性的大小,他只是在一段时间生成某些值,比如上面的ofFloat中设置了从0F,100F,并设置时间为1000
则ValueAnimator的作用就是在1000中匀速生成0F到100F的值,然后再为控件在1000中为控件的属性设上不同值,这就是动画的原理
我们可以通过线程和线程休眠来设置动画,但是这样太占用资源,所以我们不建议使用线程而使用Animator
2.我们可以获取1000内产生的值
ValueAnimator value = ValueAnimator.ofFloat(0F,100F);
value.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
}
});
这样就可以获取,我们可以通过设置一个计时器,就是每秒就为控件设置获取到的值
3.我们可以自定义获取的值(通过泛型),这样就显得更加灵活,可以在一段时间内得到我们想要的值
value.ofObject(new TypeEvaluator<Float>() {
@Override
public Float evaluate(float fraction, Float startValue, Float endValue) {
return null; // 这里可以自己自定义 返回的数据 , fraction 是0到1之间的数 这里确定的是每一帧的数据
}
},0F,100F);
new TypeEvaluator<Boolean>() { @Override
public Boolean evaluate(float fraction, Boolean startValue, Boolean endValue) {
return null;
} };
此时我们可以反回任意的值,其中fraction是从0到1,相当于进度的百分比 我们可以通过条件语句判断来反回真正需要反回的值,然后通过addUpdateListener 就可以很灵活的实现各种值的返回
4. 我们还可以控制动画的执行速度 运用插值器
mAnimator.setInterpolator(new Interpolator() {
@Override
public float getInterpolation(float input) {
return 0;// 这里 input与 return 都是0到1之间的数 , 两者之间我们可以编写 y = f(x) 的函数,斜率变化 就是我们动画的播放速率变化
}
});
常见插值器:
AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
AnticipateInterpolator 开始的时候向后然后向前甩
AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
BounceInterpolator 动画结束的时候弹起
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator 在动画开始的地方快然后慢
LinearInterpolator 以常量速率改变
OvershootInterpolator 向前甩一定值后再回到原来位置
Android 属性动画ObjectAnimator和ValueAnimator讲解的更多相关文章
- Android属性动画ObjectAnimator的使用1
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/106 属性动画ObjectAnimator的使用 属性动画 ...
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法 ...
- 【转】android 属性动画之 ObjectAnimator
原文网址:http://blog.csdn.net/feiduclear_up/article/details/39255083 前面一篇博客讲解了 android 简单动画之 animtion,这里 ...
- Android基础夯实--重温动画(五)之属性动画 ObjectAnimator详解
只有一种真正的英雄主义 一.摘要 ObjectAnimator是ValueAnimator的子类,它和ValueAnimator一样,同样具有计算属性值的功能,但对比ValueAnimator,它会更 ...
- Android属性动画之ValueAnimator的介绍
之前两篇博客,介绍的是ObjectAnimator作用与某一个控件的某一个属性.但我们的ValueAnimator它本身并不会作用与任何一个属性,它本身也不会提供任何一种动画.它简单的来说,就是一个数 ...
- Android属性动画之ObjectAnimator
相信对于Android初学者,对于Android中的动画效果一定很感兴趣,今天为大家总结一下刚刚学到的属性动画案例. 首先和一般的Android应用一样,我们先建一个工程,为了方便,我们的布局文件中就 ...
- Android属性动画完全解析(下)
转载:http://blog.csdn.net/guolin_blog/article/details/44171115 大家好,欢迎继续回到Android属性动画完全解析.在上一篇文章当中我们学习了 ...
- Android属性动画完全解析(上),初识属性动画的基本用法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系 ...
- Android属性动画完全解析(中)
转载:http://blog.csdn.net/guolin_blog/article/details/43536355 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是 ...
随机推荐
- HDU 5046 Airport【DLX重复覆盖】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意: 给定n个城市的坐标,要在城市中建k个飞机场,使城市距离最近的飞机场的最长距离最小,求这 ...
- Network | sk_buff
sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息.它在中定义,并包含很多成员变量供网络代码中的各子系统使用. 这个结构被不同的网络层(MAC或者其他 ...
- Jenkins解决Host key verification failed
1.在没有做任何操作时,是这样报错的 a.在任务中配置远程执行命令 rsync -raz --delete --progress target/testweb-v1.1.jar root@10.0 ...
- CDOJ_24 八球胜负
8球是一种台球竞赛的规则.台面上有7个红球.7个黄球以及一个黑球,当然还有一个白球.对于本题,我们使用如下的简化规则:红.黄两名选手轮 流用白球击打各自颜色的球,如果将该颜色的7个球全部打进,则这名选 ...
- XSY1659 [HNOI2012]永无乡
题面 Description 永无乡包含 n 座岛,编号从 1 到 n. 每座岛都有自己的独一无二的重要度,按照重要度可以将这n座岛排名,名次用 1到n来表示.某些岛之间由巨大的桥连接,通过桥可以从一 ...
- Unity -- 用EasyAR制作出AR红包
第一部分:前言 实现功能:打开APP或运行该demo后,会从天而降红包,有些红包是空的(大一点的),抖动的红包里面“有钱”,点击之后会产生相应的交互. 第二部分:预览 所用到的资源: 红包模型 ...
- iOS--实时监控网络状态的改变
在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体 ...
- Android 调用.so包时报错:No implementation found for native Lxxx, java.lang.UnsatisfiedLinkError: XXX时的解决办法(转)
问题就是在调用自己同事写的.so包时,怎么也掉不通,程序一直报错退出,错误内容就是: 1 No implementation found for native Lxxx, 2 Java.lang.Un ...
- CUDA 实现JPEG图像解码为RGB数据
了解JPEG数据格式的人应该easy想到.其对图像以8*8像素块大小进行切割压缩的方法非常好用并行处理的思想来实现.而其实英伟达的CUDA自v5.5開始也提供了JPEG编解码的演示样例.该演示样例存储 ...
- 纯JS设置首页,增加收藏,获取URL參数,解决中文乱码
雪影工作室版权全部,转载请注明[http://blog.csdn.net/lina791211] 1.前言 纯Javascript 设置首页,增加收藏. 2.设置首页 // 设置为主页 functio ...