关于android:Android入门教程-动画之补间动画

3次阅读

共计 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:pivotXfloat 或百分比。旋转核心的 X 坐标。示意形式:绝对于对象左边缘的像素数(例如 “5”),绝对于对象左边缘的百分比(例如 “5%”),或绝对于父级容器左边缘的百分比(例如 “5%p”)。
  • android:pivotYfloat 或百分比。旋转核心的 Y 坐标。示意形式:绝对于对象上边缘的像素数(例如 “5”),绝对于对象上边缘的百分比(例如 “5%”),或绝对于父级容器上边缘的百分比(例如 “5%p”)。

Android 零根底入门教程视频参考

正文完
 0