安卓动画总结
来源:互联网 发布:无限极 树 mysql 编辑:程序博客网 时间:2024/06/02 00:17
相关知识依然学习自任玉刚老师的安卓开发艺术探索,但是是本人自己的总结。
安卓中有三种动画,视图动画、帧动画和属性动画。严格的说帧动画也属于视图动画,只是使用方法等都略有不同。
1.插值器和估值器
首先来了解动画中的两个常用类,插值器和估值器。这两个类的功能和代码都非常简单,插值器根据当前的时间进度百分比计算出操作属性值改变的百分比,估值器则根据这个计算出的百分比来计算改变后属性的值。举个例子,在一个匀速位移动画里,时间走了一半,也就是0.5,那么插值器就会计算出属性也应该改变0.5,然后估值器会计算出坐标增加0.5位移量后的量。(默认插值器是先加速后减速)
想要做出绚丽的动画效果,免不了要自定义这两个,自定义插值器要实现Intepolator接口,接口中的getInterpolation方法直接接受时间流逝百分比作为参数,使用起来很方便。自定义估值器要实现TypeEvaluator接口,方法参数也很明确清晰。
2.视图动画
视图动画和属性动画都可以通过xml文件和代码两种方式实现,视图动画推荐用xml实现(可读性更好),属性动画推荐用代码实现(有些属性需要处理)。
视图动画分为平移、缩放、旋转、透明度四种,对应Animation的四个子类。
来看xml实现:文件在res/anim目录下,根标签是set,有两个属性,interpolatoe表示插值器,shareInterpolator表示是否内部各分动画共享插值器。
重要属性还有durarion动画时间,fillAfter动画结束后是否留在现位置。
几个子标签<alpha/scale/translate/rotate>使用比较简单,属性就不展开了。
使用时用AnimationUtils.loadAnimation获取动画,然后调用组件的startAnimation即可。
3.帧动画
定义方法见代码
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/a" android:duration="500"/> <item android:drawable="@drawable/b" android:duration="500"/></animation-list>需要注意的是这个xml文件在drawable目录下,否则没有这个标签。每一张图片的时间分别设置。
使用时将这个文件设置为组件背景,调用组件的getBackground获取AnimationDrawable对象,然后start就可以了。
4.属性动画
属性动画能操作的就不只视图动画那四种效果了,理论上属性动画能对一切对象属性进行操作。基本的类有三个,ValueAnimator, ObjectAnimator, AnimatorSet。AnimatorSet也就是几个动画效果的集合。ValueAnimator的功能是对一个值进行一段时间的持续变化赋值(变换),ObjectAnimator是对目标组件属性的值进行变换。ObjectAnimator继承自ValueAnimator,其实原理就是在ValueAnimator的基础上在每次产生变化的值的时候调用目标组件的set属性方法。平时常用的也就是这个ObjectAnimator.
清楚动画类的基本工作原理后,我们也就知道,传入动画方法的属性必须有相应的get和set方法,而且方法确实能够改变这个属性值,才能达到我们想要的效果。举个例子,View的widrh属性有set方法,但是这个方法其实并不能改变组件的宽度(详见源码),所以传入width属性组件的宽度并不会有变化。
先来看xml中的属性动画实现,q文件在res/animator下:
<?xml version="1.0" encoding="utf-8"?><set android:ordering="sequentially" xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:propertyName="x" android:duration="100" android:valueFrom="0" android:valueTo="100" android:startOffset="100" android:repeatCount="-1" android:repeatMode="restart" android:valueType="intType"/> <animator android:duration="100" android:valueFrom="0" android:valueTo="100" android:startOffset="100" android:repeatCount="-1" android:repeatMode="restart" android:valueType="intType"/></set>animator对应的就是ValueAnimator,相对于ObjectAnimator少了一个属性propertyName,也就是要改变的属性名。
set的属性ordering表示播放顺序,together表示同时播放,sequentially表示按顺序。
startOffset指播放前的延迟。repeatCount循环次数,-1表示无限循环。repeatMode循环模式,restart重新开始,reverse倒着重播。
应用:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.animt); set.setTarget(target); set.start();
在代码中实现动画则更加简单:
ObjectAnimator.ofInt(target,"x",100).setDuration(500).start();第二个参数就是属性名,当然,在链式代码中还可以设置估值器等。
多个动画组合:
AnimatorSet set=new AnimatorSet(); set.playTogether( ObjectAnimator.ofInt(target,"x",100), ObjectAnimator.ofInt(target,"y",100) ); set.setDuration(500).start();
pT的参数是一个不定数组,就是几个动画对象。
5.位移动画效果:
在3.0以前,视图动画和属性动画位移后实际位置都不会改变,也就是只有点击原位置能得到响应。3.0以后的属性动画位移后实际位置移动。
- 安卓动画总结
- 安卓动画总结
- 安卓动画总结
- 安卓动画总结
- 安卓动画(Animation)总结
- 安卓动画阶段总结
- 安卓属性动画的总结
- 安卓属性动画知识点总结
- 安卓动画知识总结 Animation AnimationSet LayoutAnimation
- Android开发之安卓属性动画大总结
- 安卓 动画帧动画基础动画
- 安卓开发-动画
- 安卓 动画效果
- 引导动画-安卓
- 安卓 动画效果
- 安卓属性动画
- 安卓齿轮动画
- 安卓-属性动画
- 4月18日,TestCommunicate,每日20行。
- 是什么阻止了人工智能的步伐
- 文章标题
- 最近觉得Android Studio的黑色主题简直充满了工业美感
- SourceInsight集成圈复杂度检测工具
- 安卓动画总结
- HDU 1078 FatMouse and Cheese(记忆化搜索 Or DP)
- 利用事件委托提升性能
- as自动导入包名
- 线程安全和可重入函数
- 一个用于简化其他“类”创建的基“类”及其使用
- Ubuntu sublime Text3 中文输入
- rubygems/core_ext/kernel_require.rb:120:in `require': cannot load such file -- colored2 (LoadError)
- Wdatepicker日期控件的使用指南