Android动画深入分析————读书笔记
来源:互联网 发布:卡巴斯基怎么样 知乎 编辑:程序博客网 时间:2024/06/13 08:12
Android动画深入分析
Android的动画分为三种:View动画、帧动画和属性动画,帧动画也算属于View动画的一种。
View动画
View动画的作用对象是View,它支持四种动画效果:平移动画,缩放动画,旋转动画和透明度动画。
View动画的种类
View动画的四种对应效果对应着Animation的四个子类:TranslateAnimation、ScaleAnimation、RotateAnimation和AlphaAnimation。既可以用xml定义也可以通过代码来创建,建议使用xml(可读性好)。具体属性介绍见书和其他文档。
帧动画
帧动画是顺序播放一组预先定义好的图片,类似于电影播放。系统提供了一个类AnimationDrawable来使用帧动画。
帧动画的使用:1.xml定义一个AnimationDrawable2.将AnimationDrawable作为View的背景并通过Drawable来播放动画即可。
注:帧动画使用简单,但是比较容易引起OOM,使用时尽量避免使用过多较大尺寸的图片。
View动画的特殊使用场景
View动画可以在一些特殊场景下使用,比如在Activity中实现不同Activity之间的切换效果。
LayoutAnimation
LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,这样当它的子元素出场时都会具有这种动画效果。
步骤如下:
1.定义LayoutAnimation
<layoutAnimationxmlns:android="http://schemas.android.com/apk/res/android"android:delay="0.5"android:animationOrder="reverse"android:animation="@anim/anim_item"/>
2.为子元素指定具体的入场动画
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="300"android:interpolator="@android:anim/accelerate_interpolator"android:shareInterpolator="true" ><alpha android:fromAlpha="0.0" android:toAlpha="1.0" /><translate android:fromXDelta="500" android:toXDelta="0" /></set>
3.为ViewGroup指定android:layoutAnimation属性。
<ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:layoutAnimation="@anim/anim_layout" android:background="#fff4f7f9" android:cacheColorHint="#00000000" android:divider="#dddbdb" android:dividerHeight="1.0px" android:listSelector="@android:color/transparent" />
除了在xml中指定LayoutAnimation外,还可以通过
LayoutAnimationController来实现。ListView listView = (ListView) layout.findViewById(R.id.list); Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_item); LayoutAnimationController controller = new LayoutAnimationController(animation); controller.setDelay(0.5f); controller.setOrder(LayoutAnimationController.ORDER_NORMAL); listView.setLayoutAnimation(controller);
Activity的切换效果
Activity有默认的切换效果,我们也可以自定义。主要用到overridePendingTransition(int enterAnim,int exitAnim)这个方法,此方法必须在startActivity或者finish之后被调用才能生效。
fragment也可以添加切换动画。FragmentTransaction中的setCustomAnimations()方法来添加。
属性动画
属性动画可以对任何对象做动画,甚至可以没有对象。只要对象有这个属性,它都能实现动画效果。实际开发建议使用代码实现属性动画(通过代码比较简单)。
理解插值器和估值器
插值器的作用是根据时间的流逝的百分比来计算出当前属性值改变的百分比。系统预置的有:LinearInterpolator(线性插值器:匀速动画)、AccelerateDecelerateInterpolator(加减速插值器:动画两头慢中间快)和DecelerateInterpolator(减速插值器:动画越来越慢)等。
估值器的作用是根据当前属性改变的百分比来计算改变后的属性值。
属性动画中的插值器和估值器是实现非匀速动画的重要手段。
属性动画的监听器
属性动画提供了监听器用于监听动画的播放过程,主要有如下两个接口:AnimatorUpdateListener和AnimatorListener。
AnimatorListener可以监听动画的开始、结束、取消以及重复播放。
AnimatorUpdateListener监听整个动画过程,每播放一帧就会被调用一次。
对任意属性做动画
属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次调用set方法,每次传递给set方法的值都不一样,确切来说是随着时间的推移,所传递的值越来越接近最终的值。
我们对object的属性abc做动画,若想让动画生效必须满足以下条件:
1.object必须提供setAbc方法。
2.object的setAbc方法对属性abc所做的改变必须能够通过某种方法反映出来。
如果不满足,有3中解决方法:
1.给对象加上get和set方法
2.用一个类包装原始对象,间接为其提供get和set方法
3.采用ValueAnimation,监听动画过程,自己实现属性的改变
属性动画的工作原理
属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次调用set方法,每次传递给set方法的值都不一样,确切来说是随着时间的推移,所传递的值越来越接近最终的值。如果动画的时候没有传递初始值,还有提供get方法。
源码分析详情见书中描述。
使用动画的注意事项
1.OOM问题:避免使用帧动画
2.内存泄漏:无限循环动画需要在Activity退出时及时停止
3.兼容性问题:做好适配工作
4.View动画的问题:View动画是对View的影像做操作,并未真正的改变View的状态。
5.不要使用px:尽量使用dp
6.动画元素的交互:3.0以前版本所有动画新位置无法触发单击事件。3.0以后属性动画新位置的单击事件能触发,View动画仍然在原位置。
7.硬件加速:动画过程中,建议开启硬件加速
- Android动画深入分析————读书笔记
- 读书笔记(7) Android动画深入分析
- Android开发艺术-第七章Android动画深入分析读书笔记
- Android 动画深入分析(Android开发艺术探索读书笔记)
- Android开发艺术探索——第七章:Android动画深入分析
- Android动画深入分析
- Android动画深入分析
- Android动画深入分析
- Android 动画深入分析
- Android 动画深入分析
- Android动画深入分析
- 深入理解Android内核设计思想——读书笔记
- 【读书笔记】【Android 开发艺术探索】第 7 章 Android 动画深入分析
- 《Android开发艺术探索》读书笔记 (7) 第7章 Android动画深入分析
- Android 动画animation 深入分析
- Android属性动画深入分析
- Android属性动画深入分析
- 深入分析Android属性动画
- char 类型转换成ascii码值
- ListView原理学习与优化总结
- ScrollView
- VC开发数据库基础之ADO篇
- Ubuntu安装JDK与环境变量配置
- Android动画深入分析————读书笔记
- ActivityManager的初步使用——获取进程、Service、Activity、App的相关信息
- iOS开发之UIView的生命周期是什么样的?
- DAY5:leetcode #7 Reverse Integer
- 【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三)
- Red Hat Enterprise Linux 4
- 内行者说!总监是如何练成的之优秀设计主管必备的品质(上篇)
- 光点沿圆角按钮运动轨迹动画
- Objective - C 编码规范