Android动画分类:
1.View动画
2.帧动画
3.属性动画
其中帧动画属于View动画中的一种。
一.View动画
1.通过对场景里的对象做图形变化(Translate,Scale,Rotate,Alpha)来产生一种动画效果,实际作用的View位置,大小等不会跟随变化。
2.view的四种动画:
TranslateAnimation,ScaleAnimation,RotateAnimation,AlphaAnimation,继承与Animation
3.View动画实现方式:
xml实现:
对应根节点:alpha,translate,scale,rotate以及组合set
通过AnimationUtils的loadAnimation方法加载
代码实现:
常用类:TranslateAnimation,ScaleAnimation,RotateAnimation,AlphaAnimation, AnmationSet
关键属性:interpolator插值器,控制动画速度,例如匀速,加速再减速,减速再加速等,可以自定义
4.自定义View动画:
继承Animation,重载applyTransformation方法
5.LayoutAnimation
(1). 作用于ViewGroup,添加这个属性之后ViewGroup在子View出场的时候会显示这个动画,例如给ListView指定LayoutAnimation
(2).实现方式:
xml:android:animation="@anim/xxx"
code:targetViewGroup.setLayoutAnimation(layoutAnimatio);
二.帧动画
简单说就是顺序播放一连串图片,达到动画效果,对于通过代码实现起来很麻烦的动画效果可以使用帧动画实现,尽量少用,不然会包会很大,而且占用内存。
实现方式:
xml:animation-list 指定item
code:AnimationDrawable
三.属性动画
1.API11以后引入,可以对任何对象做动画,其实就是改变对象的属性值而达到一种视觉的动画效果,也可以单纯的改变值,通过监听值得变化做一些相应的操作。
关键类:ValueAnimator,ObjectAnimator,AnimatorSet
对应的xml节点:animator,objectAnimator,set
2.插值器(Interpolator)和估值器(TypeEvaluator)
插值器:控制当前动画的百分比,常用的插值器有TimeInterpolator(时间插值器),LinearInterpolator(线性插值 器),AcceletateDecelerateInterpolator(加速减速插值器),
估值器:通过插值器提供的百分比,以及动画设定的最大值和最小值来计算当前的值。
3.属性动画监听器
AnimatorUpdateListener:动画更新的时候触发,可以在动画的过程中做一些特殊处理
AnimatorListener:监听动画的开始,结束,取消和重复几个事件。
4.属性动画虽然可以多任意对象进行动画,但是要真正有效需要满足一定条件:
(1).对象提供了属性的set和get方法,set方法用于改变对象的属性值,而get方法用户在没有设置属性动画的默认值的时候获取默认值
(2).对象的set方法所做的改变必须能通过某种方式展现出来,比如UI上的变化等。
5.针对上面中的set和get方法,如果有的对象没有提供相应的方法的解决方案(官方提供)
(1).如果有权限的话给对象加上set和get方法
(2).用一个类来包装原始对象,间接提供set和get方法
(3).采用ValueAnimator,监听动画过程,自己实现属性的改变。
总结一下属性动画的工作原理:
根据传递的初始值和最终值,以及动画的参数,计算动画中的属性值,通过set方法赋值,达到动画效果。
网友评论