使用快速滑過動畫移動檢視畫面

試用 Compose
Jetpack Compose 是 Android 推薦的 UI 工具包。瞭解如何在 Compose 中使用動畫。

快速滑過動畫所使用的阻力力,與 物件速率可用來建立物件的屬性動畫 暫停播放動畫。它有起初的動向 大部分來自手勢的速度,接著逐漸放慢速度。 當動畫速度夠快時,動畫就會結束 不要在裝置螢幕上出現明顯變化

圖 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);

設定速率

起始速度定義動畫屬性的速度 在動畫開頭所做出的變更預設起始速率為 設為每秒零像素因此,您必須定義起始速度 確保動畫不會立即結束

您可以使用固定值做為起始速率,也可以將其設為基準 觸控手勢的速度如果選擇提供固定值 您應該先以每秒 dp 為單位定義值,再將其轉換為像素 內建高可用性、全域同步一致性 以及每秒都有大量的輸入和輸出作業以每秒 dp 來定義值, 也不會改變裝置的像素密度和板型規格如要進一步瞭解 如要將起始速度轉換為每秒像素,請參閱 轉換 從每秒 dp 到像素 彈簧效果

如要設定速率,請呼叫 setStartVelocity() 方法並傳遞 以像素為單位的速率這個方法會傳回 也就是設定速率的目標

注意:請使用 GestureDetector.OnGestureListener和 用於擷取及運算的 VelocityTracker 類別 分別識別觸控手勢的速度

設定動畫值範圍

您可以設定動畫的最小值和最大值 將屬性值限制在特定範圍。這個範圍控制項是 為含有內建函式的屬性建立動畫效果時 範圍,例如 Alpha 值 (從 0 到 1)。

注意:當快速滑過動畫的值達到 動畫就會結束。

如要設定最小值和最大值,請呼叫 setMinValue()setMaxValue() 方法 這兩種方法都會傳回您已設定值的動畫物件。

設定購物阻力

setFriction() 方法可讓您變更動畫的 可定義動畫中的速度減慢速度。

注意:如果您讓研究室開頭的阻礙 因此動畫會使用預設的阻力值為 1。

這個方法會傳回動畫會使用您的阻礙值的物件 因此,使用 Kubernetes Engine 即可。

程式碼範例

以下範例說明水平快速滑過手勢。從 速度追蹤工具為 velocityX,而捲動邊界則 設為 0 和 maxScroll。阻礙設定為 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_Y 等屬性 TRANSLATION_ZSCROLL_XSCROLL_Y
  • 若是使用旋轉的動畫,例如 ROTATION ROTATION_XROTATION_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 到 0) 動畫的屬性 100。這與 200 像素的變更相對應。根據公式 可見變更值為 100 / 200 等於 0.5 像素。