在 Android 动画中,总共有两种类型的动画 View Animation(视图动画)和 Property Animator(属性动画),其中View Animation 又包括 Tween Animation(补间动画)和 Frame Animation(逐帧动画):
- 补间动画:对视图的内容执行一系列简单的转换(位置,大小,旋转等等)
- 逐帧动画,逐个加载一系列Drawable资源。
这两种动画类型都可以在任何View对象中使用,以提供简单的旋转计时器,活动图标和其他有用的UI元素。补间动画由这个包处理(android.view.animation); 逐帧动画由AnimationDrawable类处理。
这一篇介绍(总结)View Animation中的Tween Animation(补间动画)的操作 。
我始终坚信冰山理论,我们所接触到的不过是冰山一角,更多讲解及知识请查看官网:
https://developer.android.google.cn/training/animation/overview
一 View Animation
两个动画的关键类
- Transformation 变换类
- Animation 动画类
动画机制:动画由动画模型及变换矩阵组成,首先需要定义动画模型或动画参数,然后传到Transformation中运算,再由View呈现。在android中 Transformation类已经被封装到了android.view.animation.Animation类中,所以我们在Animation类及其子类中只需要传递相应动画参数便可实现动画效果。
通用的动画属性: | |
---|---|
android:detachWallpaper | 窗口动画的特殊选项:如果此窗口位于壁纸顶部,请不要使用它为壁纸设置动画。 |
android:duration | 动画运行的时间周期(以毫秒为单位)。 |
android:fillAfter | 设置为true时,保持显示动画运行完成后的状态 |
android:fillBefore | 设置为true或fillEnabled未设置为true时,将在动画开始之前应用动画变换(也就是在动画结束后会显示动画初始时的状态)。 |
android:fillEnabled | 设置为true时,将考虑fillBefore的值。 |
android:interpolator | 定义用于平滑动画移动的插值器。 |
android:repeatCount | 定义动画应重复的次数。 |
android:repeatMode | 定义到达结尾时的动画行为,并且重复计数大于0或无限。 Animation.RESTART 当动画到达结尾并且重复计数为INFINTE_REPEAT或正值时,动画将从头开始重新开始 Animation.REVERSE 当动画到达结尾并且重复计数为INFINTE_REPEAT或正值时,动画向后播放(然后再向前播放)。 |
android:startOffset | 一旦达到开始时间,动画运行前的延迟时间为毫秒。 |
android:zAdjustment | 允许在动画持续时间内调整动画内容的Z轴顺序。 Animation.ZORDER_TOP 设置永远在最顶端,不被其他控件遮挡 ZORDER_NORMAL 请求将动画内容保持为当前的Z顺序。 ZORDER_BOTTOM 请求在动画持续期间强制动画内容在所有其他内容下。 |
AnimationSet用于构建组合动画
在AnimationSet类中定义应该一起播放的一组动画。每个单独的动画的转换组成一个单一的转换。如果AnimationSet设置其子项也设置的任何属性(例如duration或fillBefore),则AnimationSet的值会覆盖子值。
AnimationSet从动画中继承行为的方式非常重要。应用于AnimationSet的一些Animation属性会影响AnimationSet本身,有些会被推送到子节点,有些会被忽略,如下所示:
• duration,repeatMode,fillBefore,fillAfter:这些属性在AnimationSet对象上设置时,将被推送到所有子动画。
• repeatCount,fillEnabled:AnimationSet会忽略这些属性。
• startOffset,shareInterpolator:这些属性适用于AnimationSet本身。
从Build.VERSION_CODES.ICE_CREAM_SANDWICH这些属性开始,这些属性的行为在XML资源和运行时是相同的(在该版本之前,对于AnimationSet忽略了在XML中设置的值)。也就是说,调用 setDuration(500) AnimationSet具有与android:duration=”500”在XML资源中为AnimationSet对象声明相同的效果。
构造函数: | |
---|---|
public AnimationSet(boolean shareInterpolator) | 如果此集合中的所有动画应使用与此AnimationSet关联的插补器,则传递true。如果每个动画应该使用自己的插值器,则传递false。 |
单一动画:
1.1 Alpha 透明动画
自身属性:
• android:fromAlpha 动画开始的透明度,从 0.0 –1.0 ,0.0 表示全透明,1.0 表示完全不透明
• android:toAlpha 动画结束时的透明度,也是从 0.0 –1.0 ,0.0 表示全透明,1.0 表示完全不透明
XML代码:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha=