365連休

にわかのandroidとかの開発メモ。

Animation resourcesの意訳

developer.android.com

 

アニメーションリソースは2種類のアニメーションを定義できる。

 

プロパティアニメーション

XMLで定義されたアニメーションは、ターゲットオブジェクトの背景色や透明度などプロパティを一定の時間にわたって変化する。

 

file location

res/animator/filename.xml
ファイル名はリソースIDとして使用される。

 

compiled resource datatype コンパイル済みリソースクラス

リソースポインターは、ValueAnimator(Reference)、ObjectAnimator(Reference)、AnimatorSet(Reference)のいずれか

 

resource reference 参照方法

JavaまたはKotlinコード内:R.animator.filename
XML内:@[package:]animator/filename

 

syntax 構文
<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>のいずれか1つのルートタグが必要。
<set>タグはアニメーションタグをグループ化し、さらに<set>タグは入れ子にできる。

 

elements
    • <set>
      • 他のアニメーションタグ(<objectAnimator>、<valueAnimator>、<set>)のコンテナで、AnimatorSet(Reference)を表す。
        <set>タグをネストし、アニメーションをさらにグループ化できる。
        各<set>は独自の順序属性値を定義できる。
        属性一覧

        android:ordering
        このセットのアニメーションの再生順序を指定します。

        Value Description
        sequentially 定義された順にアニメーションを再生する。
        together(default)

        同時にアニメーションを再生する。

       

    • <objetAnimator>
      • 一定時間オブジェクトの特定のプロパティをアニメーションする、ObjectAnimator(Reference)を表す。
        属性一覧
        android:propertyName
        文字列。必須属性。
        属性値と同じ名前 の オブジェクトのプロパティ をアニメーション化する。
        例えばViewオブジェクトの"alpha"や"backgroundColor"。
        ただし、objectAnimatorタグではtarget属性を指定できないため、XMLからどのオブジェクトをアニメーションするか設定できない。
        アニメーションリソースXMLをinflateし、#loadAnimator()および#setTarget()を呼び出しターゲットとなるオブジェクトとそのプロパティを設定する。
        android:valueTo
        float、int、color。必須属性。
        アニメーション化されたプロパティの最終値
        色の指定は6桁の16進数(例えば#333333)で表す。
        android:valueFrom
        float、int、color。省略可。
        アニメーション化されたプロパティの開始値。省略した場合、プロパティからgetメソッドで取得した値が使用される。
        色の指定は6桁の16進数(例えば#333333)で表す。
        android:duration
        int。省略可。
        アニメーションの時間(ミリ秒)。デフォルト値は300ms。
        android:startOffset
        int。省略可。
        アニメーションが#start()された後に遅延する時間(ミリ秒)。
        android:repeatCount
        int。省略可。
        アニメーションを繰り返す回数。"1"なら1回繰り返すため計2回再生され、"-1"で無限に繰り返す。
        デフォルト値は"0"で、アニメーションは繰り返さない。
        android:repeatMode
        int。訳注:省略可否不明。
        アニメーションの最後にどのように振る舞うか指定する。この指定を有効にするにはandroid:repeatCountを"-1"または"1"以上に設定しなければならない。"reverse"が設定されると折り返し再生される。"repeat"が設定されるとアニメーションは最初から再生される。
        android:valueType
        キーワード。色を設定する場合、この属性を指定しない。アニメーションフレームワークは自動的に色の値を処理する。
        Value Description
        intType アニメーションする値がint。
        floatType(default) アニメーションする値がfloat。

       

    • <animator>
      • 指定した時間をかけてアニメーションする。ValueAnimator(Reference)を表す。
        訳注:ValueAnimator.AnimatorUpdateListenerによって変化する値を処理する。どう使うかは自由。
        属性一覧
        android:valueTo
        float、int、color。必須属性。
        アニメーションの最終値
        色の指定は6桁の16進数(例えば#333333)で表す。
        android:valueFrom
        float、int、color。必須属性。
        アニメーションの開始値
        色の指定は6桁の16進数(例えば#333333)で表す。
        android:duration
        int。省略可。
        アニメーションの時間(ミリ秒)。デフォルト値は300ms。
        android:startOffset
        int。省略可。
        アニメーションが#start()された後に遅延する時間(ミリ秒)。
        android:repeatCount
        int。省略可。
        アニメーションを繰り返す回数。"1"なら1回繰り返すため計2回再生され、"-1"で無限に繰り返す。
        デフォルト値は"0"で、アニメーションは繰り返さない。
        android:repeatMode
        int。訳注:省略可否不明。
        アニメーションの最後にどのように振る舞うか指定する。この指定を有効にするにはandroid:repeatCountを"-1"または"1"以上に設定しなければならない。"reverse"が設定されると折り返し再生される。"repeat"が設定されるとアニメーションは最初から再生される。
        android:valueType
        キーワード。色を設定する場合、この属性を指定しない。アニメーションフレームワークは自動的に色の値を処理する。
        Value Description
        intType アニメーションする値がint。
        floatType(default) アニメーションする値がfloat。

 

example

XMLファイルはres/animator/property_animator.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>

このアニメーションを実行するには、AnimatorSetオブジェクトとしてXMLをinflateし、開始する前に全てのアニメーションのターゲットオブジェクトを設定しなければならない。
#setTarget()を呼び出すと、AnimatorSetの全ての子に同じターゲットオブジェクトを設定する。
以下にその方法を示す。

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

 

see also
  • コアトピック プロパティアニメーション En
  • API Demosでその使用方法の例を示す。

 

 

トゥイーンアニメーション - Viewアニメーション

アニメーションはXMLで定義し、グラフィックの回転、フェード、移動、ストレッチなどを実行する。

 

file location

res/anim/filename.xml
ファイル名はリソースIDとして使用される。

 

compiled resource datatype コンパイル済みリソースクラス

リソースポインターは、Animation(Reference)

 

resource reference 参照方法

JavaまたはKotlinコード内:R.anim.filename
XML内:@[package:]anim/filename

 

syntax 構文
<?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>、<alpha>、<scale>、<translate>、<rotate>のいずれか1つのルートタグが必要。
<set>タグはアニメーションタグをグループ化し、さらに<set>タグは入れ子にできる。

 

elements
    • <set>
      • 他のアニメーションタグ(<alpha>、<scale>、<translate>、<rotate>、<set>)のコンテナで、AnimationSet(Reference)を表す。
        <set>タグをネストし、アニメーションをさらにグループ化できる。
        属性一覧

        android:interpolator
        アニメーションに適用するInterpolatorリソース(Reference)を指定する。(訳注:アニメーション速度を調節するためのリソース)
        Interpolatorクラスではなくリソースへの参照を指定する必要がある。
        Interpolatorリソースは、プラットフォームから提供される既定の物以外に、独自のInterpolatorリソースを定義できる。詳細は後述する。

        android:shareInterpolator
        Bool値。全ての子要素に同じInterpolatorリソースを適用する場合、trueを指定する。

       

    • <alpha>
      • フェードインまたはフェードアウトアニメーションでAlphaAnimation(Reference)を表す
        属性一覧
        android:fromAlpha
        float。0.0が透明で1.0が不透明である不透明度の開始オフセット値。
        android:toAlpha
        float。不透明度の最終オフセット値。
        <alpha>の他の属性値については、AnimationクラスのReferenceを参照すること。(Animationオブジェクトの全てのXML属性を継承している)

       

    • <scale>
      • アニメーションのリサイズ。pivotXとpivotYを指定することで、イメージの中心を外側あるいは内側に指定できる。例えば、値が0,0(左上)の場合、右下へと拡大する。ScaleAnimation(Reference)を表す。
        属性一覧
        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座標。
        <scale>の他の属性値については、AnimationクラスのReferenceを参照すること。(Animationオブジェクトの全てのXML属性を継承している)

       

    • <translate>
      • 水平・垂直方向の移動。3つの記法があり、-100~100を"%"付きで指定すると自身に対するパーセンテージ、-100~100を"%p"付きで指定すると親に対するパーセンテージ、接尾辞を付けないfloatを指定すると絶対位置となる。TranslateAnimation(Reference)を表す。
        属性一覧
        android:fromXDelta
        float。
        floatまたはパーセンテージ。Xオフセットの開始値
        通常のピクセル座標として(例えば"5")、自身の幅に対するパーセンテージとして(例えば"5%")、親の幅に対するパーセンテージとして(例えば"5%p")のいずれかを指定する。
        android:toXDelta
        float。
        floatまたはパーセンテージ。Xオフセットの最終値
        android:fromYDelta
        float。
        floatまたはパーセンテージ。Yオフセットの開始値
        通常のピクセル座標として(例えば"5")、自身の高さに対するパーセンテージとして(例えば"5%")、親の高さに対するパーセンテージとして(例えば"5%p")のいずれかを指定する。
        android:toYDelta
        float。
        floatまたはパーセンテージ。Yオフセットの最終値
        <translate>の他の属性値については、AnimationクラスのReferenceを参照すること。(Animationオブジェクトの全てのXML属性を継承している)

       

    • <rotate>
      • アニメーションの回転。RotateAnimation(Reference)を表す。
        属性一覧
        android:fromDegrees
        float。
        回転角度の開始値。度(degrees)で指定する。
        android:toDegrees
        float。
        回転角度の最終値。度(degrees)で指定する。
        android:pivotX
        float。
        回転の中心点のX座標。
        オブジェクトの左端のピクセル座標として(例えば"5")、自身の左端に対するパーセンテージとして(例えば"5%")、親コンテナの左端に対するパーセンテージとして(例えば"5%p")のいずれかを指定する。
        android:pivotX
        float。
        回転の中心点のY座標。
        <rotate>の他の属性値については、AnimationクラスのReferenceを参照すること。(Animationオブジェクトの全てのXML属性を継承している)

 

example

XMLファイルはres/anim/hyperspace_jump.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);

 

see also
  • コアトピック 2D Graphics:トゥイーンアニメーション En

 

Interpolators インターポレータ

InterpolatorはXMLで定義された、アニメーションの変化速度に影響を与える調節機能である。
定義済みのアニメーションエフェクトで加速、減速、繰り返し、はずみ(Bounce)などが可能となる。
Interpolatorはandroid:interpolator属性を持つアニメーションタグへ適用され、その値はInterpolatorリソースへの参照である。
Androidで使用できる全てのInterpolatorはInterpolatorクラス(Reference)のサブクラスである。
次の表は、Androidに含まれている全てのパブリックリソースの参照であり、android:interpolator属性で指定できる。

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

これらをandroid:interpolator属性を使用して適用する方法は、以下の通り。

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>

 

Custom interpolators カスタムインターポレータ

定義済みのInterpolator(上記の表)に満足できない場合、カスタマイズできる。
例えば、AnticipateInterpolatorの加速度を調整したり、CycleInterpolatorのサイクル数を調節したりできる。
そのためにはXMLファイルによってInterpolatorリソースを作成する必要がある。

 

file location

res/anim/filename.xml
ファイル名はリソースIDとして使用される。

 

compiled resource datatype コンパイル済みリソースクラス

リソースポインターは、対応するinterpolatorオブジェクト

 

resource reference 参照方法

XML内:@[package:]anim/filename

 

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

属性を使用しない場合、元のInterpolatorと全く同じように機能する。

 

elements

XMLで定義されている各Interpolatorの実装は、名前を小文字で開始することに注意する。

    • <accelerateDecelerateInterpolator>
      • 始めはゆっくり、途中で加速し、終わりはゆっくり。
        属性は無い。

       

    • <accelerateInterpolator>
      • 始めはゆっくり、途中で加速する。
        android:factor
        float。加速レート(初期値1)。

       

    • <anticipateOvershootInterpolator>
      • 始めは後方へ、途中で前方へ飛び出す。(訳注:引っ張って離すイメージ)
        android:tension
        float。張力(初期値2)。

       

    • <anticipateInterpolator>
      • 始めは後方へ、途中で前方へ飛び出し、はみ出た後、戻る。(訳注:引っ張って離したら、勢いあまってはみ出て戻るイメージ)
        android:tension
        float。張力(初期値2)。
        android:extraTension
        float。張力の乗算量(初期値1.5)。

       

    • <bounceInterpolator>
      • 終わりにはずむ。
        属性は無い。

       

    • <cycleInterpolator>
      • 正弦波パターンで指定した周波数だけ繰り返す。
        android:cycles
        integer。周波数(初期値1)。

       

    • <decelerateInterpolator>
      • 始めに加速し、終わりに減速する。
        android:factor
        float。減速レート(初期値1)。

       

    • <linearInterpolator>
      • 変化率は一定。
        属性は無い。

       

    • <overshootInterpolator>
      • 始めに前方へ飛び出し、はみ出した後、戻る。(訳注:発射して、勢いあまってはみ出て戻るイメージ)
        android:tension
        float。張力(初期値2)。

       

example

XMLファイルはres/anim/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"
        />

このアニメーションXMLはinterpolatorを適用する。

<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" />

 

フレームアニメーション - Viewアニメーション

XMLで定義されたアニメーションで、フィルムのように画像を順番に表示する。

file location

res/drawable/filename.xml
ファイル名はリソースIDとして使用される。

 

compiled resource datatype コンパイル済みリソースクラス

リソースポインターは、AnimationDrawable(Reference)

 

resource reference 参照方法

Javaコード内:R.drawable.filename

XML内:@[package:]anim/filename

 

syntax 構文
<?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>

 

elements
    • <animation-list>
      • 必須。ルート要素でなければならない。1つ以上のタグを含む。
        android:oneshot
        boolean。アニメーションを一度だけ実行する場合"true"、繰り返す場合"false"。

       

    • <item>
      • アニメーションの1フレームを定義する。タグの子でなければならない。
        android:drawable
        ドローワブルリソースを指定する。このフレームで使用される画像。
        android:duration
        integer。このフレームを表示する時間(ミリ秒)

       

example

XMLファイルはres/drawable/rocket.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>

次のコードは、Viewの背景にアニメーションを設定し、再生する。

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
    rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
    
    rocketAnimation = rocketImage.getBackground();
    if (rocketAnimation instanceof Animatable) {
        ((Animatable)rocketAnimation).start();
    }

 

see also
  • コアトピック 2D Graphics:フレームアニメーション En(訳注:リンクはトゥイーンアニメーションのページ)

 

 

※上記はhttps://developer.android.com/guide/topics/resources/animation-resource.html意訳である

Android開発者向けドキュメントを意訳してみる。 - 365連休

意訳元https://developer.android.com/ライセンス解釈
ソースコードから抽出されたドキュメントやコードはAndroid Open Source Projectの優先ライセンスであるApache 2.0 licenseが適用され、それ以外のコンテンツはCC BY 2.5が適用されている。
よって、ページ全体の意訳についてはCC BY 2.5における翻案行為、ページ内のコード転載についてはApache 2.0 licenseにおける頒布行為にあたると解釈している。