Android 資源說明之動畫資源

動畫資源

動畫資源可以定義兩種類型的動畫之一:
屬性動畫

通過使用Animator在設定的時間段內修改對象的屬性值來創建動畫。

View動畫

您可以使用視圖動畫框架執行兩種類型的動畫:

  • 補間動畫:通過使用動畫對單個圖像執行一系列轉換來創建動畫。
  • 幀動畫:或通過使用AnimationDrawable按順序顯示一系列圖像來創建動畫。

屬性動畫

以XML定義的動畫,用於在設定的時間內修改目標對象的屬性,例如背景顏色或Alpha值。

文件位置

res/animator/filename.xml

文件名將用作資源ID。

已編譯的資源數據類型

指向ValueAnimatorObjectAnimatorAnimatorSet的資源指針。

資源引用

在基於Java或Kotlin代碼中:R.animator.filename
在XML中:@ [package:] animator / filename

用法

<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["repeat" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>

該文件必須具有單個根元素:<set><objectAnimator><valueAnimator>。您可以在<set>元素內將動畫元素組合在一起,包括其他<set>元素。

詳解

<set>

描述:包含其他動畫元素(<objectAnimator><valueAnimator>或其他<set>元素)的容器。表示AnimatorSet。您可以指定嵌套的<set>標記以進一步將動畫分組在一起。每個<set>都可以定義自己的排序屬性。

屬性:

  • android:ordering
    關鍵詞。指定此集中動畫的播放順序。
Value Description
sequentially 按順序播放此集中的動畫
together (default) 同時在此集中播放動畫
<objectAnimator>

描述:在特定時間內動畫對象的特定屬性。表示ObjectAnimator

屬性:

  • android:propertyName
    String型,必須的。動畫屬性名稱,你可以爲View設定alphabackgroundColor。您必須通過調用loadAnimator()並調用setTarget()來設置包含此屬性的目標對象來加載您的動畫XML資源。
  • android:valueTo
    float, int, 或 color。必須的。動畫屬性結束的值。顏色表示爲六位十六進制數字(例如,#333333)。
  • android:valueFrom
    float, int, 或 color。動畫屬性開始的值。如果未指定,則動畫從屬性的get方法獲取的值開始。顏色表示爲六位十六進制數字(例如,#333333)。
  • android:duration
    int型。動畫的時間(以毫秒爲單位)。默認值爲300毫秒。
  • android:startOffset
    int型。調用start()後動畫延遲的毫秒數。
  • android:repeatCount
    int型。重複動畫多少次。設置爲“-1”以無限重複或爲正整數。例如,值“1”表示動畫在初始運行動畫後重復一次,因此動畫總共播放兩次。默認值爲“0”,表示不重複。
  • android:repeatMode
    int型。動畫到達動畫結尾時的行爲方式。 android:repeatCount必須設置爲正整數或“-1”才能使此屬性生效。設置爲“反向”以使動畫在每次迭代時反向或“重複”以使動畫循環從每次開始。
  • android:valueType
    關鍵詞。如果值是顏色,請不要指定此屬性。動畫框架自動處理顏色值。
Value Description
intType 指定動畫值是整數
floatType (default) 指定動畫值爲浮點數
<animator>

描述:在指定的時間內執行動畫。表示ValueAnimator
屬性:

  • android:valueTo 必須的。
  • android:valueFrom 必須的。
  • android:duration
  • android:startOffset
  • android:repeatCount
  • android:repeatMode
  • android:valueType

舉例

保存在res / animator / property_animator.xml的XML文件:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

要運行此動畫,必須將代碼中的XML資源設置爲AnimatorSet對象,然後在啓動動畫集之前爲所有動畫設置目標對象。爲方便起見,調用setTarget()AnimatorSet的所有子項設置單個目標對象。以下代碼顯示瞭如何執行此操作:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.animator.property_animator);
set.setTarget(myObject);
set.start();

View動畫

視圖動畫框架支持補間和逐幀動畫,它們都可以用XML聲明。以下部分描述瞭如何使用這兩種方法。

補間動畫

以XML格式定義的動畫,用於執行圖形上的旋轉,淡入淡出,移動和拉伸等過渡。

文件位置

res/anim/filename.xml

文件名將用作資源ID。

已編譯的資源數據類型

指向Animation的資源指針。

資源引用

在基於Java或Kotlin代碼中:R.anim.filename
在XML中:@ [package:] anim / filename

用法

<?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>

該文件必須具有單個根元素:<alpha><scale><translate><rotate><set>元素,其中包含一組(或多組)其他動畫元素(甚至嵌套<set>元件)。

詳解

<set>

描述:容納其他動畫元素(<alpha><scale><translate><rotate>)或其他<set>元素的容器。表示一個AnimationSet
屬性:

  • android:interpolator
    插值資源。用於動畫的插值器。該值必須是對指定內插器(不是內插器類名)的資源的引用。平臺提供默認插值器資源,您也可以創建自己的插補器資源。
  • android:shareInterpolator
    Boolean值。如果要在所有子元素中共享相同的插值器,則爲“true”。
<alpha>

描述:淡入淡出或淡出動畫。表示AlphaAnimation
屬性:

  • android:fromAlpha
    Float型。啓動不透明度偏移,其中0.0是透明的,1.0是不透明的。
  • android:toAlpha
    Float型。結束不透明度偏移,其中0.0是透明的,1.0是不透明的。
<scale>

描述:調整大小的動畫。您可以通過指定pivotXpivotY指定圖像的中心點,使其向外(或向內)增長。例如,如果這些值爲0,0(左上角),則所有增長都將向下和向右。表示ScaleAnimation
屬性:

  • android:fromXScale
    Float型。開始X軸大小偏移,其中1.0沒有變化。
  • android:toXScale
    Float型。結束X軸大小偏移,其中1.0沒有變化。
  • android:fromYScale
    Float型。開始Y軸大小偏移,其中1.0沒有變化。
  • android:toYScale
    Float型。結束Y軸大小偏移,其中1.0沒有變化。
  • android:pivotX
    Float型。縮放對象時,X座標保持固定大小。
  • android:pivotY
    Float型。縮放對象時,Y座標保持固定大小。
<translate>

描述:垂直和/或水平運動。支持以下三種格式中的以下任何屬性:從-100到100以“%”結尾的值,表示相對於自身的百分比;以“%p”結尾的-100到100之間的值,表示相對於其父級的百分比;沒有後綴的浮點值,表示絕對值。表示TranslateAnimation
屬性:

  • android:fromXDelta
    Float型或百分比。開始X軸偏移。表示:相對於正常位置的像素(例如“5”),相對於元素寬度的百分比(例如“5%”),或相對於父寬度的百分比(例如“5%p”) 。
  • android:toXDelta
    Float型或百分比。結束X軸偏移。
  • android:fromYDelta
    Float型或百分比。開始Y軸偏移。
  • android:toYDelta
    Float型或百分比。結束Y軸偏移。
<rotate>

描述:旋轉動畫。表示RotateAnimation
屬性:

  • android:fromDegrees
    Float型。起始角度位置,以度爲單位。
  • android:toDegrees
    Float型。結束角度位置,以度爲單位。
  • android:pivotX
    Float型。縮放對象時,X座標保持固定大小。
  • android:pivotY
    Float型。縮放對象時,Y座標保持固定大小。

舉例

保存在res / anim / hyperspace_jump.xml的XML文件:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    </set>
</set>

下面的代碼將動畫應用於ImageView並啓動動畫:

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);

插值器

插值器是以XML定義的動畫修飾符,它影響動畫中的變化率。這允許您現有的動畫效果加速,減速,重複,反彈等。

內插器應用於具有android:interpolator屬性的動畫元素,其值是對內插器資源的引用。

Android中可用的所有插值器都是Interpolator類的子類。對於每個插值器類,Android包含一個公共資源,您可以參考該公共資源,以便使用android:interpolator屬性將插值器應用於動畫。下表指定了每個插補器使用的資源:

Interpolator class Resource ID
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

以下是如何使用android:interpolator屬性應用其中一個:

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>
自定義插值器

如果您對平臺提供的插補器(在上表中列出)不滿意,則可以創建具有已修改屬性的自定義插補器資源。例如,您可以調整AnticipateInterpolator的加速率,或調整CycleInterpolator的週期數。爲此,您需要在XML文件中創建自己的插補器資源。

文件位置
res/anim/filename.xml

文件名將用作資源ID。

已編譯的資源數據類型

指向相應插值器對象的資源指針。

資源引用

在XML中:@ [package:] anim / filename

用法
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

如果您不應用任何屬性,那麼插補器的功能將與平臺提供的內容完全相同(在上表中列出)。

詳解

請注意,每個Interpolator實現在以XML格式定義時,都以小寫字母開頭。

<accelerateDecelerateInterpolator>

描述:變化率開始和結束緩慢但在中間加速。
屬性:沒有屬性。

<accelerateInterpolator>

描述:變化率開始緩慢,然後加速。
屬性:

  • android:factor
    Float型。加速率(默認爲1)。
<anticipateInterpolator>

描述:變化開始向後飛快進化。
屬性:

  • android:tension
    Float型。要應用的張力(默認值爲2)。
<anticipateOvershootInterpolator>

描述:變化向後開始,向前掠過並超過目標值,然後穩定在最終值。
屬性:

  • android:tension
    Float型。要應用的張力(默認值爲2)。
  • android:extraTension
    Float型。增加張力的量(默認值爲1.5)。
<bounceInterpolator>

描述:這一變化在最後反彈。
屬性:沒有屬性。

<cycleInterpolator>

描述:重複動畫指定的循環次數。變化率遵循正弦曲線模式。
屬性:

  • android:cycles
    int型。循環次數(默認爲1)。
<decelerateInterpolator>

描述:變化率很快開始,然後減速。
屬性:

  • android:factor
    Float型。減速率(默認爲1)。
<linearInterpolator>

描述:變化率是不變的。
屬性:沒有屬性。

<overshootInterpolator>

描述:變化向前掠過並超過最後一個值,然後回來。
屬性:

  • android:tension
    Float型。要應用的張力(默認值爲2)。
舉例

保存在res / anim / my_overshoot_interpolator.xml的XML文件:

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

此動畫XML將應用插值器:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />

幀動畫

以XML格式定義的動畫,按順序顯示一系列圖像(如電影)。

文件位置

res/drawable/filename.xml

文件名將用作資源ID。

已編譯的資源數據類型

指向AnimationDrawable的資源指針。

資源引用

在基於Java或Kotlin代碼中:R.drawable.filename
在XML中:@ [package:] drawable / filename

用法

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>

詳解

<animation-list>

描述:這必須是根元素。包含一個或多個元素。
屬性:

  • android:oneshot
    如果您想要執行一次動畫,則爲“true”;“false”循環播放動畫。
<item>

描述:單幀動畫。必須是<animation-list>元素的子元素。
屬性:

  • android:drawable
    Drawable資源。用於此框架的drawable。
  • android:duration
    整數。顯示此幀的持續時間,以毫秒爲單位。

舉例

保存在res / drawable / rocket.xml的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

下面的代碼將動畫設置爲視圖的背景,然後播放動畫:

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
    ((Animatable)rocketAnimation).start();
}

完事

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章