Android tween 动画 XML 梳理

前言:

Tween动画是展示出旋转、渐变、移动、缩放的这么一种转换过程,即补间动画。Tween动画有两种定义方式:XML形式,编码形式。此次主要来梳理XML的方式配置动画 android

(1)XML定义动画,按照动画定义语法完成XML,置于/res/anim目录下,文件名做为资源ID引用函数

(2)XML文件中必须有一个根元素,能够是<alpha>、<scale>、<translate>、<rotate>中的任意一个,也能够是<set>来管理一个由前面几个元素组成的动画集合。优化

(3)<set>是一个动画容器,管理多个动画的群组,与之相对应的Java对象是AnimationSet。动画

简单配置

1、alpha (渐变)

<alpha>是渐变更画,能够实现淡入和淡出的效果,与之对应的Java对象是AlphaAnimation。
android:fromAlpha属性表明起始alpha值,浮点值,范围在0.0和1.0之间,分别表明透明和彻底不透明,
android:toAlpha属性表明结尾alpha值,浮点值,范围也在0.0和1.0之间。 编码

示例:

<?xml version="1.0" encoding="utf-8"?>
<!-- 表示透明度从0.1到1.0,时长为3000ms。-->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"

android:duration="3000"
android:fromAlpha="0.1"
android:toAlpha="1.0"/><!-- 表示透明度从0.1到1.0,时长为3000ms -->
 

2、rotate (旋转)

<rotate>是旋转动画,与之对应的Java对象是RotateAnimation。
android:fromDegrees属性表明起始角度,浮点值,单位:度;
android:toDegrees属性表明结尾角度,浮点值,单位:度;
code

android:pivotX属性表明旋转中心的X坐标值,
android:pivotY属性表明旋转中心的Y坐标值,
这两个属性也有三种表示方式,数字方式表明相对于自身左边缘的像素值,num%方式表明相对于自身左边缘或顶边缘的百分比,num%p方式表明相对于父容器的左边缘或顶边缘的百分比。
另外,在动画中,若是咱们添加了android:fillAfter=”true”后,这个动画执行完以后保持最后的状态;android:duration=”integer”表明动画持续的时间,单位为毫秒。xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromDegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360"/>

3、scale (缩放)

<scale>是缩放动画,能够实现动态调控件尺寸的效果,与之对应的Java对象是ScaleAnimation。
android:fromXScale属性表明起始的X方向上相对自身的缩放比例,浮点值,好比1.0表明自身无变化,0.5表明起始时缩小一倍,2.0表明放大一倍;
android:toXScale属性表明结尾的X方向上相对自身的缩放比例,浮点值;
android:fromYScale属性表明起始的Y方向上相对自身的缩放比例,浮点值;
android:toYScale属性表明结尾的Y方向上相对自身的缩放比例,浮点值;
android:pivotX属性表明缩放的中轴点X坐标,浮点值,
android:pivotY属性表明缩放的中轴点Y坐标,浮点值,对于这两个属性,若是咱们想表示中轴点为图像的中心,咱们能够把两个属性值定义成0.5或者50%。对象

android:fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
android:interpolator 指定一个动画的插入器,共三种:
    (1)accelerate_decelerate_interpolator 加速-减速 动画插入器
    (2)accelerate_interpolator 加速-动画插入器
    (3)decelerate_interpolator 减速- 动画插入器

示例:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fillAfter="false"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0"/>

4、translate(位移)

<translate>是位移动画,表明一个水平、垂直的位移。与之对应的Java对象是TranslateAnimation。
android:fromXDelta属性表明起始X方向的位置,
android:toXDelta表明结尾X方向上的位置,
android:fromYScale属性表明起始Y方向上的位置,
android:toYDelta属性表明结尾Y方向上的位置,
以 上四个属性都支持三种表示方式:浮点数、num%、num%p;若是以浮点数字表示,表明相对自身原始位置的像素值;若是以num%表示,表明相对于本身 的百分比,好比toXDelta定义为100%就表示在X方向上移动本身的1倍距离;若是以num%p表示,表明相对于父类组件的百分比。 blog

示例:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromXDelta="10"
android:fromYDelta="10"
android:toXDelta="100"
android:toYDelta="100"/>
 

补充:

<set>

<set>是一个动画容器,管理多个动画的群组,与之相对应的Java对象是AnimationSet。
它有两个属性,
android:interpolator表明一个插值器资源,能够引用系统自带插值器资源,也能够用自定义插值器资源,默认值是匀速插值器;稍后我会对插值器作出详细讲解。
android:shareInterpolator表明<set>里面的多个动画是否要共享插值器,默认值为true,即共享插值器,若是设置为false,那么<set>的插值器就再也不起做用,咱们要在每一个动画中加入插值器。
示例:

<?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:fromX="float"
        android:toX="float"
        android:fromY="float"
        android:toY="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
</set>ip

 

插值器

首先要了解为何须要插值器,由于在补间动画中,咱们通常只定义关键帧(首帧或尾帧),而后由系统自动生成中间帧,生成中间帧的这个过程能够成为“插值”。 插值器定义了动画变化的速率,提供不一样的函数定义变化值相对于时间的变化规则,能够定义各类各样的非线性变化函数,好比加速、减速等。下面是几种常见的插 值器:

E}5IZLCBE84QCM652[TLW{F

插值器使用法:

<set android:interpolator=”@android:anim/accelerate_interpolator”>

</set>

个性化插值器:

若是系统提供的插值器不能知足须要,能够经过修改插值器的属性优化,好比修改AnticipateInterpolator的加速速率,调整CycleInterpolator的循环次数等。

常见的插值器可调整的属性:

<accelerateDecelerateInterpolator> 无

<accelerateInterpolator> android:factor 浮点值,加速速率,默认为1

<anticipateInterploator> android:tension 浮点值,起始点后退的张力、拉力数,默认为2

<anticipateOvershootInterpolator> android:tension 同上 android:extraTension 浮点值,拉力的倍数,默认为1.5(2 * 1.5)

<bounceInterpolator> 无

<cycleInterplolator> android:cycles 整数值,循环的个数,默认为1

<decelerateInterpolator> android:factor 浮点值,减速的速率,默认为1

<linearInterpolator> 无

<overshootInterpolator> 浮点值,超出终点后的张力、拉力,默认为2

使用修改插值器属性法

在/res/anim下建立一个XML文件(以修改overshootInterpolator属性为例)命名为my_overshoot_interpolator.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<overshootInterpolator xmlns:android=”http://schemas.android.com/apk/res/android”
android:tension=”7.0″/>

引用到自定义的插值器

<scale xmlns:android=”http://schemas.android.com/apk/res/android”
android:interpolator=”@anim/my_overshoot_interpolator”
…/>

自定义插值器

若是以上的修改系统插值器属性仍没法知足须要,能够自定义插值器。

相关文章
相关标签/搜索