共计 4962 个字符,预计需要花费 13 分钟才能阅读完成。
补间动画(Tween Animation)
- 补间动画就是咱们只需指定开始、完结的“关键帧“,而变动中的其余帧由零碎来计算,不用本人一帧帧的去定义。
- Android 应用 Animation 代表形象动画,包含四种子类:AlphaAnimation (透明度动画)、ScaleAnimation (缩放动画)、TranslateAnimation (位移动画)、RotateAnimation (旋转动画)
- 个别都会采纳动画资源文件来定义动画,把界面与逻辑拆散
- 定义好 anim 文件后,咱们能够通过 AnimationUtils 工具类来加载它们,加载胜利后返回一个 Animation。而后就能够通过 View 的 startAnimation(anim) 开始执行动画了。
示例
- 补间动画:通过应用 Animation 对单张图片执行一系列转换来创立动画。
- 在 XML 中定义的动画,用于对图形执行旋转、淡出、挪动和拉伸等转换。
- 动画文件放在
res/anim/
,该文件名将用作资源 ID。
挪动示例
先用一个例子建设直观的意识。新建一个动画 xml,实现从左到右的成果。move_hor_1.xml
<?xml version="1.0" encoding="utf-8"?> | |
<set xmlns:android="http://schemas.android.com/apk/res/android"> | |
<translate | |
android:duration="200" | |
android:toXDelta="-100%" /> | |
<translate | |
android:duration="400" | |
android:startOffset="200" | |
android:toXDelta="100%" /> | |
</set> |
要应用这个动画,须要用到 AnimationUtils.loadAnimation(getContext(), R.anim.move_hor_1);
来加载动画。失去对象 mAnimation
交给View.startAnimation(mAnimation);
来启动。
认真看一下动画 xml 里的内容:
- set 里有 2 个 translate
- translate 示意挪动动作
- duration 是这个动作的执行时长(毫秒)
- toXDelta 示意横行挪动
- startOffset 示意动画开始执行多久后再执行这个动作
实际上,第二个 translate 周期是 400 毫秒,它“等了”200 毫米才开始执行。把 View 从右边挪动到了左边。
缩放示例
除了位移,还能够执行缩放成果。
示例:先放大再放大回去。次要是用了 android:repeatMode=”reverse” 和 android:repeatCount=”1″。
残缺动画 xml 如下:
<?xml version="1.0" encoding="utf-8"?> | |
<set xmlns:android="http://schemas.android.com/apk/res/android"> | |
<scale | |
android:duration="600" | |
android:fromXScale="1" | |
android:fromYScale="1" | |
android:pivotX="50%" | |
android:pivotY="50%" | |
android:repeatCount="1" | |
android:repeatMode="reverse" | |
android:toXScale="1.35" | |
android:toYScale="1.35" /> | |
</set> |
scale 外面咱们遇到了几个元素 pivotX,repeatCount,repeatMode
- android:pivotX 在对象缩放时要放弃不变的 X 坐标;pivotY 同理。
- android:repeatCount 动画的反复次数。设为 “-1” 示意有限次反复,也可设为正整数。
例如,值 “1” 示意动画在首次播放后反复播放一次,因而动画总共播放两次。默认值为 “0”,示意不反复。 - android:repeatMode 动画播放到结尾处的行为。
- android:repeatCount 必须设置为正整数或 “-1″,该属性才无效。
- 设置为 “reverse” 可让动画在每次迭代时反向播放,
- 设置为 “repeat” 则可让动画每次从头开始循环播放。
多个动画元素示例
一个 <set>
汇合里能够蕴含多个元素。
<?xml version="1.0" encoding="utf-8"?> | |
<set xmlns:android="http://schemas.android.com/apk/res/android" | |
android:shareInterpolator="false"> | |
<rotate | |
android:duration="500" | |
android:fromDegrees="0" | |
android:pivotX="50%" | |
android:pivotY="50%" | |
android:toDegrees="360" /> | |
<translate | |
android:duration="500" | |
android:fromXDelta="0%" | |
android:toXDelta="50%" /> | |
<alpha | |
android:duration="500" | |
android:fromAlpha="1" | |
android:toAlpha="0.5" /> | |
<set | |
android:interpolator="@android:anim/decelerate_interpolator" | |
android:startOffset="500"> | |
<rotate | |
android:duration="400" | |
android:fromDegrees="360" | |
android:pivotX="100%" | |
android:pivotY="50%" | |
android:toDegrees="0" /> | |
<translate | |
android:duration="400" | |
android:fromXDelta="0%" | |
android:toXDelta="-50%" /> | |
<alpha | |
android:duration="400" | |
android:fromAlpha="0.5" | |
android:toAlpha="1" /> | |
</set> | |
</set> |
<set>
里搁置着多个元素,能够把 <set>
放进 <set>
里。咱们分成登程和回来两个动作。
登程:
第一个 <rotate>
是从本人的核心地位开始。<translate>
程度向右走了 50%。
回来:
前面 <rotate>
的pivotX
须要思考到登程时程度挪动了 50%,因而 pivotX
取值 100%。
而 <translate>
从 0% 走到 -50% 即可。
动画 xml 元素
<?xml version="1.0" encoding="utf-8"?> | |
<set xmlns:android="http://schemas.android.com/apk/res/android" | |
android:interpolator="@[package:]anim/interpolator_resource" | |
android:shareInterpolator=["true" | "false"] > | |
<alpha | |
android:fromAlpha="float" | |
android:toAlpha="float" /> | |
<scale | |
android:fromXScale="float" | |
android:toXScale="float" | |
android:fromYScale="float" | |
android:toYScale="float" | |
android:pivotX="float" | |
android:pivotY="float" /> | |
<translate | |
android:fromXDelta="float" | |
android:toXDelta="float" | |
android:fromYDelta="float" | |
android:toYDelta="float" /> | |
<rotate | |
android:fromDegrees="float" | |
android:toDegrees="float" | |
android:pivotX="float" | |
android:pivotY="float" /> | |
<set> | |
... | |
</set> | |
</set> |
set
包容其余动画元素(<objectanimator style="box-sizing: inherit;">、<valueanimator style="box-sizing: inherit;">
或其余 <set style="box-sizing: inherit;">
元素)的容器。代表 AnimatorSet。能够搁置多个动画元素,组合在一起。每个 set 可定义本人的 ordering
属性。
android:interpolator
插值器资源。要利用于动画的 Interpolator。该值必须是对指定插值器的资源的援用(而不是插值器类名称)。可应用平台提供的默认插值器资源,也可创立本人的插值器资源。android:shareInterpolator
布尔值。如果要在所有子元素中共用同一插值器,则为“true”。
alpha
淡入或淡出动画。对应 AlphaAnimation 类。
android:fromAlpha
浮点数。起始不透明度偏移,0.0 示意通明,1.0 示意不通明。android:toAlpha
浮点数。完结不透明度偏移,0.0 示意通明,1.0 示意不通明。
scale
缩放动画,调整大小的动画;对应 ScaleAnimation
。指定 pivotX
和 pivotY
,来指定 View 向外(或向内)扩大的中心点。例如,如果这两个值为 0、0(左上角),则所有扩大均向右下方向进行。
android:fromXScale
浮点数。起始 X 尺寸偏移,其中 1.0 示意不变。android:toXScale
浮点数。完结 X 尺寸偏移,其中 1.0 示意不变。android:fromYScale
浮点数。起始 Y 尺寸偏移,其中 1.0 示意不变。android:toYScale
浮点数。完结 Y 尺寸偏移,其中 1.0 示意不变。android:pivotX
浮点数。在对象缩放时要放弃不变的 X 坐标。android:pivotY
浮点数。在对象缩放时要放弃不变的 Y 坐标。
translate
挪动动画。垂直或程度挪动。或者程度和垂直挪动一起。对应 TranslateAnimation。反对采纳以下三种格局之一的以下属性:从 -100 到 100 的以“%”结尾的值,示意绝对于本身的百分比;从 -100 到 100 的以“%p”结尾的值,示意绝对于其父项的百分比;不带后缀的浮点值,示意绝对值。
属性:
android:fromXDelta
float 或百分比。起始 X 偏移。示意形式:绝对于失常地位的像素数(例如 “5”),绝对于元素宽度的百分比(例如 “5%”),或绝对于父项宽度的百分比(例如 “5%p”)。android:toXDelta
float 或百分比。完结 X 偏移。示意形式同fromXDelta
android:fromYDelta
float 或百分比。起始 Y 偏移。示意形式:绝对于失常地位的像素数(例如 “5”),绝对于元素高度的百分比(例如 “5%”),或绝对于父项高度的百分比(例如 “5%p”)。android:toYDelta
float 或百分比。完结 Y 偏移。示意形式同fromYDelta
rotate
旋转动画。对应 RotateAnimation。
属性:
android:fromDegrees
浮点数。起始角度地位,以度为单位。android:toDegrees
浮点数。完结角度地位,以度为单位。android:pivotX
float 或百分比。旋转核心的 X 坐标。示意形式:绝对于对象左边缘的像素数(例如 “5”),绝对于对象左边缘的百分比(例如 “5%”),或绝对于父级容器左边缘的百分比(例如 “5%p”)。android:pivotY
float 或百分比。旋转核心的 Y 坐标。示意形式:绝对于对象上边缘的像素数(例如 “5”),绝对于对象上边缘的百分比(例如 “5%”),或绝对于父级容器上边缘的百分比(例如 “5%p”)。
Android 零根底入门教程视频参考