学完本章,你将了解一下内容 Android视图动画、属性动画、动画实例
Animation 框架定义了透明度、旋转、缩放和位移几种常见的动画,而且控制的是整个View。
每次绘制视图时 View 所在的 Vie wGroup 中的 drawChild 函数获取该 View 的 Animation 的 Transformation 值,然后调canvas.concat(transform ToApply.getMatrix()) , 通过矩阵运符完成动画帧。如帧动画没有完成,就继续调invalidate()函数,启动下次绘制来驱动动画,从而完成整个动画的绘制。
以下举出一些简单的视图动画使用方法。 在这里给出仓库地址。 gitHub仓库地址 1.1 透明度动画
AlphaAnimation aa = new AlphaAnimation(0, 1); aa.setDuration(1000); sevenBinding.ivDemo.startAnimation(aa);1.2 旋转动画
RotateAnimation ra = new RotateAnimation(0, 360, RotateAnimation.RELATIVE_TO_SELF, 1f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); ra.setDuration(1000); sevenBinding.ivDemo.startAnimation(ra);1.3 缩放动画
ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1); sa.setDuration(2000); sevenBinding.ivDemo.startAnimation(sa);1.4 平移动画
TranslateAnimation ta = new TranslateAnimation( TranslateAnimation.RELATIVE_TO_SELF,0f, TranslateAnimation.RELATIVE_TO_SELF,0f, TranslateAnimation.RELATIVE_TO_SELF,0f, TranslateAnimation.RELATIVE_TO_SELF, 1f); ta.setDuration(2000); sevenBinding.ivDemo.startAnimation(ta);1.5 动画集合 将以上几种动画组合起来,就成了动画集合
AnimationSet as = new AnimationSet(true); as.setDuration(2000); as.addAnimation(aa); as.addAnimation(ra); as.addAnimation(sa); as.addAnimation(ta); sevenBinding.ivDemo.startAnimation(as);由于Android3.0之前已有的动画框架Animation存在局限性,动画的改变只是显示,并不能响应事件。所以Android 在3.0之后推出属性动画这个新的动画框架。而在Animation框架中使用最多的就是AnimatorSet和ObjectAnimator配合使用。 大致过程就是ObjectAnimator进行更加细化的控制,只控制一个对象的一个属性值,而使用ObjectAnimator组合到AnimatorSet形成一个动画。
特点
ObjectAnimator能够自动驱动,可以调用setFrameDelay(longframeDelay)设置动画帧之间的间隙时间,调整频率,减少动画过程中频繁绘制界面,而在不影响动画效果的前提下减少CPU资源消耗。更重要的是,属性动画通过调用属性get、set方法来真实的控制了一个View的属性值。基本可以实现所有的动画效果。 以下是是伪代码 gitHub仓库地址
//属性动画ObjectAnimator ObjectAnimator oa = ObjectAnimator.ofFloat(sevenBinding.ivDemo, "translationX", 400); oa.setDuration(1000); oa.start();过程分析
通过ObjectAnimator的静态工厂类,返回一个ObjectAnimator对象。参数包括一个对象和一个对象属性的名字,但这个属性必须有get和set函数,内部会通过java反射机制来动用set函数修改对象的属性值。
使用以前动画框架所产生的动画,并不能改变事件响应的位置,它只是单纯修改了显示。动画结束后,原来的图片实际位置还是起始位置。
但是属性动画则真实地改变了一个View的属性,所以位置也会发生变化。
通过ObjectAnimator的静态工厂方法,创建一个ObjectAnimator对象。
第一个参数,需要操纵的view第二个参数,需要操纵的属性第三个参数,可变数组参数,需要穿传进去该属性变化的一个取值过程。,这里只设置了一个参数。在使用ObjectAnimtor的时候,操纵的属性必须具有get和set 属性,不然ObjectAnimator就无法起效。以下是可以直接使用属性动画的属性值。
translationX和 translationY:这两个属性作为一种增量来控制着View对象从它布局容器的左上角坐标偏移的位置。rotation、rotationX和rotationY:这三个属性控制着VIew对象围绕支点进行2D和3D旋转scaleX和scaleY:控制View对象绕它的支点进行2D缩放