Android动画机制与使用技巧(一)——Android View动画框架
2016-06-01 17:29
501 查看
Animation框架定义了透明度、旋转、缩放和位移几种常见的动画,而且控制的是整个View,实现原理是每次绘制视图时,View所在的ViewGroup中的drawChild()方法获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧。如果动画没有完成,就继续调用invalidate()方法,启动下次绘制来驱动动画,从而完成整个动画的绘制。
视图动画使用简单,效果丰富,它提供了AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation四种动画方式,并提供了AnimationSet动画集合,混合使用多种动画。Android系统在3.0之后推出了属性动画框架,相比属性动画,视图动画的一个非常大的缺陷就是不具备交互性,当某个元素发生视图动画后,其响应事件的位置还依然是在动画前的地方,所以视图动画只能做普通的动画效果,避免交互的发生。但它的优点也非常明显,即效率比较高且使用方便。
视图动画使用非常简单,不仅可以通过XML文件来描述一个动画过程,同样可以使用代码来控制整个动画过程。
其参数分别为旋转的起始角度和旋转中心点的坐标。可以通过设置参数来控制旋转动画的参考系,代码如下所示(这里设置旋转参考系为自身中心点)。
与旋转动画一样,缩放动画也可以设置缩放的中心点,代码如下所示(这里设置缩放参考系为自身中心点)。
对于动画事件,Android也提供了对应的监听回调,代码如下所示:
视图动画使用简单,效果丰富,它提供了AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation四种动画方式,并提供了AnimationSet动画集合,混合使用多种动画。Android系统在3.0之后推出了属性动画框架,相比属性动画,视图动画的一个非常大的缺陷就是不具备交互性,当某个元素发生视图动画后,其响应事件的位置还依然是在动画前的地方,所以视图动画只能做普通的动画效果,避免交互的发生。但它的优点也非常明显,即效率比较高且使用方便。
视图动画使用非常简单,不仅可以通过XML文件来描述一个动画过程,同样可以使用代码来控制整个动画过程。
透明度动画
为视图增加透明度的变换动画。AlphaAnimation aa = new AlphaAnimation(0, 1); aa.setDuration(1000); view.startAnimation(aa);
旋转动画
为视图增加旋转的变换动画。RotateAnimation ra = new RotateAnimation(0, 360, 100, 100); ra.setDuration(1000); view.startAnimation(ra);
其参数分别为旋转的起始角度和旋转中心点的坐标。可以通过设置参数来控制旋转动画的参考系,代码如下所示(这里设置旋转参考系为自身中心点)。
RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); ra.setDuration(1000); view.startAnimation(ra);
位移动画
为视图移动时增加位移动画。TranslateAnimation ta = new TranslateAnimation(0, 200, 0, 300); ta.setDuration(1000); view.startAnimation(ta);
缩放动画
为视图的缩放增加动画效果。ScaleAnimation sa = new ScaleAnimation(0, 2, 0, 2); sa.setDuration(1000); view.startAnimation(sa);
与旋转动画一样,缩放动画也可以设置缩放的中心点,代码如下所示(这里设置缩放参考系为自身中心点)。
ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); sa.setDuration(1000); view.startAnimation(sa);
动画集合
通过AnimationSet,可以将动画以组合的形式展现出来:AnimationSet as = new AnimationSet(true); as.setDuration(1000); AlphaAnimation aa = new AlphaAnimation(0, 1); aa.setDuration(1000); as.addAnimation(aa); TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 200); ta.setDuration(1000); as.addAnimation(ta); view.startAnimation(as);
对于动画事件,Android也提供了对应的监听回调,代码如下所示:
animation.setAnimationListener(new Animation.AnimationListener() { //动画开始 @Override public void onAnimationStart(Animation animation) { } //动画结束 @Override public void onAnimationEnd(Animation animation) { } //动画重复 @Override public void onAnimationRepeat(Animation animation) { } });
相关文章推荐
- Android开发之图形图像与动画(二)Animation实现图像的渐变/缩放/位移/旋转
- Android开发重写Animation实现下拉图片后弹射回去效果示例
- Android编程之Animation动画详解
- 解析Android中Animation动画的编写要点
- Android Animation实战之屏幕底部弹出PopupWindow
- Android xml实现animation的4种动画效果实例代码
- Android Animation实战之一个APP的ListView的动画效果
- How to delete all the animations in a presentation
- Transform/Transition/Animation的区别与联系
- HTML前端开发之路——Animation
- Android 应用的动画实践--View Animation篇
- angular.animation的使用
- IOS中常用动画方法总结
- Qt-4.6动画Animation快速入门三字决
- View初始 INVISIBLE GONE时,执行Animation动画效果
- 研究一下Android中的动画效果
- 自定义dialog--symbian
- 乔布斯在2005年斯坦福大学毕业典礼上的演讲:我生命中的三个故事
- Android 移动动画- TranslateAnimation