Android 属性动画(一)
来源:互联网 发布:微信公众平台源码下载 编辑:程序博客网 时间:2024/05/21 04:20
网上关于属性动画的博客也算是很多了,看过之后,然后自己去用的过程中还是感觉不是很详细,因为有些东西还是需要自己实践过之后才会发现。(要api11之后才可以使用,由于市场上手机基本是4.0以上的系统了,所以以后写动画可以直接用属性动画)
关于动画应该分为补间动画、帧动画、属性动画;
补间动画中存在着平移动画、缩放动画、旋转动画、渐变动画。属性动画中也包含这些,然而为何google为何又要弄出属性动画来,原因还是比较多的,先举个最简单的例子:
补间动画中平移动画,一个按钮移动后,使用setFillAfter停留在最后位置,如果你按钮设置点击事件,你会发现点击停留后位置的按钮是无法触发点击事件的,但是点击按钮原来位置可以触发点击事件。而属性动画是可以在最后停留位置触发点击事件的。这里就不贴代码了,自己可以去试试。
对于属性动画对于类似补间动画的类似效果我们可以使用ObjectAnimator和ValueAnimator来实现。
打开ObjectAnimator源码可以发现,它其实是ValueAnimator的子类,对其进一步的封装。
本篇主要讲解ObjectAnimator。ValueAnimator的讲解后续再给补上
(1)平移
属性名包含translationX、translationY、X、Y(ps:我试了一下属性名translation,log中会错误,即translation属性名是不存在的)
首先说下都是平移为什么会有translationX和X两种属性名,它们的区别在于前者为相对位置,后者为绝对位置
将图片放在布局的中央
对比一下两种属性可以发现其中的差别
ObjectAnimator.ofFloat(iv,"translationX",0.0f,300.0f).setDuration(1000).start();ObjectAnimator.ofFloat(iv,"X",0.0f,300.0f).setDuration(1000).start();
translationX为相对位置的X=0坐标开始移动300
X则为绝对位置(即窗口的X=0坐标)开始移动300
translationY和Y的差别原理相同
我们查看下ObjectAnimator.ofFloat的源码
查看到源码我们可以看到,最后传的值是float… ,可以传递多个float类型的值,其中主要是传一个值及多个值中存在着区别
我分别写了如下代码进行对比:
mAnimator = ObjectAnimator.ofFloat(iv,”translationY”,300f);这段代码,执行完之后,再次执行将会发现图片不会再动,其实动画仍然是执行了,只是起value值一直为300,(第一次则是从0开始到300),对比一下两次的Log便可以发现
第一次执行开始以及结束:
第二次执行开始以及结束:
mAnimator = ObjectAnimator.ofFloat(iv,"translationY",0f,300f);mAnimator = ObjectAnimator.ofFloat(iv,"translationY",0f,300f,100f);mAnimator = ObjectAnimator.ofFloat(iv,"translationY",0f,300f,100f,200f);
这三个其实就都是从相对位置0坐标开始,到达最后的位置,中间的值便是从上一个坐标到达该坐标,最终到达终点坐标位置。每次位移距离则是后者减去前者的值。
(2)旋转
属性名包含rotation、rotationX、rotationY
除属性名外其他与平移用法相同
rotation:默认为以view的中心点旋转(可以设置为某个点),为2d旋转
rotationX:以view的X中心轴进行旋转,3d旋转
rotationY:以view的Y中心轴进行旋转,3d旋转
//以特定的位置设置为旋转中心点mAnimator = ObjectAnimator.ofFloat(iv,"rotation",0.0f,-360.0f,0f);iv.setPivotX(300);//设置指定旋转中心点X坐标iv.setPivotY(300);//设置指定旋转中心点Y坐标mAnimator.setDuration(1000).start();//3d旋转 360度(以X轴中心) ObjectAnimator.ofFloat(iv,"rotationX",0.0f,360.0f).setDuration(1000).start(); //3d旋转 360度(以Y轴中心) ObjectAnimator.ofFloat(iv,"rotationY",0.0f,360.0f).setDuration(1000).start();
(3)缩放
属性名包含scaleX、scaleY(本以为存在scale属性同时缩放X方向和Y方向,试过之后发现是不存在的)
除属性名外其他与平移用法相同
//X方向缩放ObjectAnimator.ofFloat(iv,"scaleX",1.0f,2.0f).setDuration(1000).start();//Y方向缩放ObjectAnimator.ofFloat(iv,"scaleY",0.0f,2.0f).setDuration(1000).start();
(4)淡入淡出
属性名alpha
ObjectAnimator.ofFloat(iv,"alpha",0f,1f).setDuration(1000).start();
(5)动画监听器
细心的朋友应该在讲平移动画的时候看到了这么几行代码:
mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (float) animation.getAnimatedValue(); Log.i(TAG,""+value); } }); mAnimator.addListener(new MyAnimatorListenerAdapter()); mAnimator.addPauseListener(new MyAnimatorListenerAdapter());
这些listener还是很重要的,我们可以在这些状态中进行一些复杂的操作。addUpdateListener是监听动画执行中值的变化;addListener则是监听动画的开始、取消、结束、重复;addPauseListener则是监听动画的暂停、恢复
其实动画是有几种状态的分别为
boolean isStarted() // 开始状态(需api14及以上才可使用) boolean isRunning() // 执行中状态 boolean isPaused() // 暂停状态需(api19及以上才可使用)
动画执行动作可分为:
Animator.start() // 开始动画Animator.end() // 结束动画Animator.cancel() // 取消动画Animator.pause() // 暂停动画(需api19及以上才可使用)Animator.resume() // 暂停后恢复动画(需api19及以上才可使用)
详细可以查看这篇文章
(补充)
Animator还存在着延时开始
Animator.setStartDelay(1000);
重复次数
setRepeatCount(2);
重复的模式
Animator.setRepeatMode(ValueAnimator.REVERSE);
差值器
Animator.setInterpolator(new LinearInterpolator());
以及使用xml来创建动画
后面会详细讲解。
这篇就写到这里吧。
- Android 属性动画 (一)
- Android 属性动画(一)
- Android动画--属性动画总结(一)
- Android动画机制-属性动画(一)
- Android属性动画一
- Android动画属性一
- Android动画学习-视图动画&属性动画(一)
- android动画基础(一) View动画和属性动画
- Android属性动画---Property Animation(一)
- Android属性动画--Property Animation(一)
- Android之属性动画(一)
- android属性动画Animator(一)
- Android之属性动画(一)
- Android属性动画Property Animation(一)
- Android属性动画完全解析(一)
- Android属性动画学习笔记(一)
- Android属性动画实战(一)
- Android属性动画学习笔记(一)
- 透过面试题,洞察Hbase 核心知识点
- hdu 1824 Let's go home【2-SAT------强连通Tarjan】
- UVa 401 Palindromes(简单字符串)
- Linphone探索:6 . Linphone用户注册
- react思维导图
- Android 属性动画(一)
- android 开机自动运行程序
- 算法杂货铺——分类算法之决策树(Decision tree)
- _tmain()和main()的区别
- Rxjava(2.操作符)
- 开始学习kamailio
- Java性能优化指南系列(一):概述和性能测试方法
- maven 不同环境打包方案
- Swift - 自定义函数规则说明