前言
下午在掘金上看到了Android終于出了彈簧動(dòng)畫,馬不停蹄的擼起代碼,研究一下這個(gè)小家伙。畢竟ios的彈簧效果已經(jīng)出來很久了。話不多說,先上效果圖。
效果圖
這里寫圖片描述
配置環(huán)境
1.需要25的tools
compile 'com.android.support:support-dynamic-animation:25.3.0'
主要代碼
在代碼中可以看到new 了一個(gè)SpringAnimation,get到Spring后,就可以對(duì)這個(gè)Spring(管理彈簧動(dòng)畫的實(shí)例,控制著彈簧的勁度系數(shù),阻尼系數(shù)以及最終位置);其中Stiffness代表勁度系數(shù),DampingRatio代表阻尼系數(shù),F(xiàn)inalPosition代表最終位置;假設(shè)最終位置一定,彈簧在運(yùn)動(dòng)到最終位置只受到彈力和阻尼力的作用,就可以算出彈簧的加速度,從而得到位置,形成彈簧效果。
最終位置一般默認(rèn)為View的初始位置,一般只要設(shè)置勁度系數(shù)和阻尼系數(shù)就好了。f = -kx,其中f就代表彈力,k就代表勁度系數(shù);至于阻尼系數(shù),需要涉及到微積分,有興趣的可以去了解下計(jì)算公式,我是理解為緩沖系數(shù)。
只要簡單設(shè)置下阻尼和勁度系數(shù)就可以得到上圖的效果啦,其中SpringAnimation對(duì)Z軸也有支持,不過只能在Api大于21的系統(tǒng)上使用。
if (box.getTranslationX() != 0) {
animationX = new SpringAnimation(box, SpringAnimation.TRANSLATION_X, 0);
animationX.getSpring().setStiffness(getStiffness());
animationX.getSpring().setDampingRatio(getDamping());
animationX.getSpring().setFinalPosition(getFinalPositionX());
animationX.setStartVelocity(velocityTracker.getXVelocity());
animationX.start();
}
if (box.getTranslationY() != 0) {
animationY = new SpringAnimation(box, SpringAnimation.TRANSLATION_Y, 0);
animationY.getSpring().setStiffness(getStiffness());
animationY.getSpring().setDampingRatio(getDamping());
// animationY.getSpring().setFinalPosition(getFinalPositionY());
animationY.setStartVelocity(velocityTracker.getYVelocity());
animationY.start();
}
velocityTracker.clear();
例子
具體的項(xiàng)目我已經(jīng)放到我的github了,有需要的可以看一下。
Github SpringAnimation
參考文章