谨以文章记录学习历程,如有错误还请指明。
动画综述
Google大大对动画的总述如下:
Animations can add visual cues that notify users about what’s going on in your app. They are especially useful when the UI changes state, such as when new content loads or new actions become available. Animations also add a polished look to your app, which gives it a higher quality look and feel.
没错,放上原文我只是装个逼,~
简单来说,动画就两个作用:
- 添加可视提示,通知我们这个APP中正在发生的事情。比如用户界面发生变化时,有新的内容加载或某些操作变为可用。
- 提供高逼格的外观(装逼利器)
动画的分类如下:
视图动画(View Animation)
补间动画(Tween Animation)
概述
- 作用于视图对象
View
,如TextView
,不可作用于属性,如点击响应位置等 - 通过确定开始的视图样式 & 结束的视图样式、中间动画变化过程由系统补全来确定一个动画
- 动画可以在视图对象的内容上执行一系列简单的转换(位置、大小、旋转和透明度)。如果你有一个TextView对象,你可以移动,旋转,缩放文本。如果它有一个背景图像,背景图像将随着文本一起被转换。
- 由
XML
或JAVA
代码定义。建议使用XML
文件,因为它比更可读、可重用和可切换
分类
根据动画效果,补间动画分为以下4类:
* 透明度动画(alpha)
* 缩放动画(scale)
* 平移动画(Translate)
* 旋转动画(rotate)
不同动画与Java类、xml文件关键字对应关系如下:
名称 | Java子类 | xml关键字 | 说明 |
---|---|---|---|
透明度动画 | AlphaAnimation | <alpha> 放置在res/anim/ 目录下 |
透明度渐变 |
旋转动画 | RotateAnimation | <rotate> 放置在res/anim/ 目录下 |
视图旋转 |
缩放动画 | ScaleAnimation | <scale> 放置在res/anim/ 目录下 |
放大/缩小 视图尺寸大小 |
平移动画 | TranslateAnimation | <translate> 放置在res/anim/ 目录下 |
视图位置移动 |
复合动画 | AnimationSet | <set> 放置在res/anim/ 目录下 |
一个持有其它动画元素alpha、scale、translate、rotate或者其它set元素的容器 |
详细说明
补间动画的继承关系:
由于Animation
是抽象基类,其提供了一些通用的动画属性方法,如下所示
xml属性 | Java方法 | 说明 |
---|---|---|
android:detachWallpaper | setDetachWallpaper(boolean) | 是否在壁纸上运行 |
android:duration | setDuration(long) | 动画的运行时间(以毫秒为单位);必须设置 |
android:fillAfter | setFillAfter(boolean) | 动画结束时是否保持动画最后的状态;默认为false,优先于fillBefore |
android:fillBefore | setFillBefore(boolean) | 动画结束时是否还原到开始动画前的状态;默认为true |
android:fillEnabled | setFillEnabled(boolean) | 是否应用fillBefore的值,对fillAfter无影响;默认为true |
android:interpolator | setInterpolator(Interpolator) | 设定插值器(指定的动画效果,譬如回弹等) |
android:repeatCount | setRepeatCount(int) | 重复次数 |
android:repeatMode | setRepeatMode(int) | 重复类型有两个值,reverse表示倒序回放,restart表示从头播放 |
android:startOffset | setStartOffset(long) | 调用start函数之后等待开始运行的时间,单位为毫秒 |
android:zAdjustment | setZAdjustment(int) | 表示被设置动画的内容运行时在Z轴上的位置(top/bottom/normal),默认为normal |
透明度动画(Alpha)– 属性
xml属性 | Java方法 | 说明 |
---|---|---|
android:fromAlpha | AlphaAnimation(float fromAlpha, …) | 动画开始的透明度(0.0到1.0,0.0是全透明,1.0是不透明) |
android:toAlpha | AlphaAnimation(…, float toAlpha) | 动画结束的透明度,同上 |
旋转动画(Rotate)– 属性
xml属性 | Java方法 | 说明 |
---|---|---|
android:fromDegrees | RotateAnimation(float fromDegrees, …) | 旋转开始角度,正代表顺时针度数,负代表逆时针度数 |
android:toDegrees | RotateAnimation(…, float toDegrees, …) | 旋转结束角度,正代表顺时针度数,负代表逆时针度数 |
android:pivotX | RotateAnimation(…, float pivotX, …) | 缩放起点X坐标(数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点) |
android:pivotY | RotateAnimation(…, float pivotY) | 缩放起点Y坐标,同上规律 |
缩放动画(Scale)– 属性
xml属性 | Java方法 | 说明 |
---|---|---|
android:fromXScale | ScaleAnimation(float fromX, …) | 初始X轴缩放比例,1.0表示无变化 |
android:toXScale | ScaleAnimation(…, float toX, …) | 结束X轴缩放比例 |
android:fromYScale | ScaleAnimation(…, float fromY, …) | 初始Y轴缩放比例 |
android:toYScale | ScaleAnimation(…, float toY, …) | 结束Y轴缩放比例 |