フリング アニメーションを使用してビューを移動する

Compose を試す
Jetpack Compose は、Android に推奨される UI ツールキットです。Compose でアニメーションを使用する方法を学習します。
<ph type="x-smartling-placeholder"></ph> Spring AnimationSpec →

フリングベースのアニメーションは、 物体の速度です。オブジェクトのプロパティをアニメーション化し、 アニメーションが徐々に終了します初期の勢いがあり 主に操作の速度から受け取り、徐々に遅くなります。「 アニメーションの速度が十分下がると、アニメーションは終了する デバイスの画面に目に見える変化がないことを確認します

図 1. フリング アニメーション

関連トピックについては、次のガイドをご覧ください。

AndroidX ライブラリを追加する

物理ベースのアニメーションを使用するには、AndroidX ライブラリをプロジェクトに追加する必要があります。 次のとおりです。

  1. アプリ モジュールの build.gradle ファイルを開きます。
  2. AndroidX ライブラリを dependencies セクションに追加します。

    Groovy

            dependencies {
                implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
            }
            

    Kotlin

            dependencies {
                implementation("androidx.dynamicanimation:dynamicanimation:1.0.0")
            }
            

フリング アニメーションを作成する

FlingAnimation クラスを使用すると、 フリング アニメーションを作成します。フリング アニメーションを作成するには、 FlingAnimation クラスのインスタンスと には、アニメーション化するオブジェクトとオブジェクトのプロパティを指定します。

Kotlin

val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)

Java

FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);

速度を設定する

開始速度は、アニメーション プロパティが 位置が変化します。デフォルトの開始速度は 0 ピクセル/秒に設定します。そのため、開始速度を定義する必要があります。 アニメーションがすぐに終了しないようにできます。

開始速度として固定値を使うことも、速度を基準として タップ操作の速度です。固定値を指定する場合は dp/秒で値を定義してからピクセル数に変換 毎秒dp/秒で値を定義すると速度は デバイスの密度やフォーム ファクタに依存しません。詳細については、このモジュールの 開始速度をピクセル/秒に変換するには、 コンバージョンに dp/秒からピクセル/秒への変換セクション スプリング アニメーション

速度を設定するには、setStartVelocity() メソッドを呼び出して、 ピクセル/秒の速度ですこのメソッドは、フリング オブジェクトを 速度を設定します。

注: GestureDetector.OnGestureListener および 取得と計算を行う VelocityTracker クラス タップ操作の速度はそれぞれ異なります。

アニメーションの値の範囲を設定する

希望するタイミングでアニメーションの最小値と最大値を設定できます。 プロパティ値を特定の範囲に制限します。この範囲制御は 属性をアニメーション化する場合に特に便利です。 (例: alpha(0 ~ 1))

: フリング アニメーションの値が 最小値または最大値を超えると、アニメーションは終了します。

最小値と最大値を設定するには、setMinValue() を呼び出します。 と setMaxValue() メソッドをそれぞれ指定します。 どちらのメソッドも、値を設定したアニメーション オブジェクトを返します。

摩擦を設定する

setFriction() メソッドを使用すると、アニメーションの 困難です。アニメーションで速度が減少する速さを定義します。

: トラフィックの始めに障害を設定しないと、 アニメーションではデフォルトの摩擦値 1 が使用されます。

このメソッドは、指定された摩擦値を使用するアニメーションのオブジェクトを返します。 提供します。

サンプルコード

次の例は、水平方向のフリングを示しています。観測された速度は、 速度トラッカーが velocityX、スクロール境界が 0 に設定し、 max スクロール。摩擦は 1.1 に設定されています。

Kotlin

FlingAnimation(view, DynamicAnimation.SCROLL_X).apply {
    setStartVelocity(-velocityX)
    setMinValue(0f)
    setMaxValue(maxScroll)
    friction = 1.1f
    start()
}

Java

FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
fling.setStartVelocity(-velocityX)
        .setMinValue(0)
        .setMaxValue(maxScroll)
        .setFriction(1.1f)
        .start();

最小表示変更を設定する

ピクセル単位で定義されていないカスタム プロパティをアニメーション化する場合は、 ユーザーに表示されるアニメーション値の最小限の変化です。これは、 アニメーションを終了するための適切なしきい値を決定します。

アニメーション化の際にこのメソッドを呼び出す必要はありません。 DynamicAnimation.ViewProperty です。これは、 最小表示変化はプロパティから取得されます。次に例を示します。

  • 視認範囲のデフォルトの最小変化値は 1 ピクセルです。 TRANSLATION_XTRANSLATION_YTRANSLATION_Z さん、SCROLL_X さん、 SCROLL_Y
  • 回転を使用するアニメーション(ROTATION など)の場合、 ROTATION_X、および ROTATION_Y の最小表示 MIN_VISIBLE_CHANGE_ROTATION_DEGREES、つまり 1/10 ピクセルです。
  • 不透明度を使用するアニメーションの場合、最小表示変更は次のとおりです。 MIN_VISIBLE_CHANGE_ALPHA、1/256 などが該当します。

アニメーションの最小表示変更を設定するには、 setMinimumVisibleChange() メソッドを呼び出し、 最小表示定数または計算に必要な値のいずれか 指定することもできますこの値の計算について詳しくは 詳しくは、 可視変化の最小値の計算

Kotlin

anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE

Java

anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);

: 値をアニメーション化する場合にのみ、値を渡す必要があります。 ピクセル単位で定義されていないカスタムプロパティを 選択できます。

最小表示変更値の計算

カスタム プロパティの可視変化の最小値を計算するには、 式:

最小表示変化 = カスタム プロパティ値の範囲 / 範囲 アニメーション(ピクセル単位)

たとえば、アニメーション化するプロパティは、0 から 100。これが 200 ピクセルの変化に対応します。式に従い、最小値は 100 / 200 は 0.5 ピクセルに相当します。