簡介
彈簧效果動畫SpringAnimation與甩動效果動畫FlingAnimation使用上很類似,主要區別在於FlingAnimation是根據甩動動作fling提供的速度和摩擦力來控制動畫,而SpringAnimation是根據彈簧的剛度、阻尼、目標終點三個因素來實現彈簧動畫效果。所以對於彈簧動畫,設定剛度Stiffness、阻尼DampingRatio、目標終點FinalPosition這三個引數就可以實現彈簧動畫了,還有就是非必要因素速度Velocity。由於SpringAnimation的一些基本使用與FlingAnimation很相似,所以基本使用請參考《FlingAnimation的使用》這篇文章,本文只對重要的地方說明。先看效果如下。
對應專案地址:
新增庫
def dynamicanimation_version = "1.0.0"
implementation "androidx.dynamicanimation:dynamicanimation:$dynamicanimation_version"
使用SpringForce設定彈簧效果
在基於彈簧特性的動畫中,SpringForce
類允許您自定義彈簧的剛度、阻尼比以及最終位置,也可以新增一個速度。動畫一開始,彈簧彈力便會更新每一幀的動畫值和速度。動畫會一直持續,直到彈簧彈力達到平衡狀態。
更詳細可以看AndroidDeveloper官網
阻尼比用於描述彈簧振動逐漸衰減的狀況;
-
當阻尼比大於 1 時,會出現過阻尼現象。它會使物件快速地返回到靜止位置。
-
當阻尼比等於 1 時,會出現臨界阻尼現象。這會使物件在最短時間內返回到靜止位置。
-
當阻尼比小於 1 時,會出現欠阻尼現象。這會使物件多次經過並越過靜止位置,然後逐漸到達靜止位置。
-
當阻尼比等於零時,便會出現無阻尼現象。這會使物件永遠振動下去。
常用阻尼有
-
DAMPING_RATIO_HIGH_BOUNCY
-
DAMPING_RATIO_MEDIUM_BOUNCY
-
DAMPING_RATIO_LOW_BOUNCY
-
DAMPING_RATIO_NO_BOUNCY
剛度定義了用於衡量彈簧強度的彈簧常量。常用剛度有
-
STIFFNESS_HIGH
-
STIFFNESS_MEDIUM
-
STIFFNESS_LOW
-
STIFFNESS_VERY_LOW
給動畫設定彈簧屬性時,要知道彈簧屬性SpringForce是彈簧動畫SpringAnimation的一個屬性,所以可以new 也可以使用預設的get
final View img = findViewById(R.id.imageView);
final SpringAnimation anim = new SpringAnimation(img, DynamicAnimation.TRANSLATION_Y);
//new and set
SpringForce force = new SpringForce();
force.setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY);
force.setStiffness(SpringForce.STIFFNESS_LOW);
anim.setSpring(force);
//或者getDefault and set
…
//Setting the damping ratio to create a low bouncing effect.
anim.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY);
//Setting the spring with a low stiffness.
anim.getSpring().setStiffness(SpringForce.STIFFNESS_LOW);
最終位置雖然也屬於SpringForce的一個屬性,但是使用SpringAnimation來設定即可
new SpringForce(finalPosition)
//建構函式
public <K> SpringAnimation(K object, FloatPropertyCompat<K> property,
float finalPosition)
springAnimation.animateToFinalPosition(float finalPosition)
速度設定速度是為了新增在甩動後給彈簧動畫新增初始速度,使動畫更符合實際慣性運動效果。
springAnimation.setStartVelocity(velocityX);
總結