1、SpringAnimation動畫簡單介紹
//從右向左位移0.5秒完成
ObjectAnimator objectAnimator = null;
objectAnimator = ObjectAnimator.ofFloat(view, "translationX", pageWidth, 0);//位移頁面寬度
objectAnimator.setDuration(500);//位移時長
objectAnimator.start();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//SpringAnimation動畫sin算法方式會超出屏幕 建議在設置控件距離的時候使用
//android:layout_marginLeft="5dp"偏移五個單位的dp
SpringForce spring = new SpringForce(0)
.setDampingRatio(0.3f)//0.9幅度小一次 0.7幅度小一次,0.3兩次,dampingRatio越大,擺動次數(shù)越少,當?shù)?的時候完全不擺動
.setStiffness(50f);//stiffness值越小,彈簧越容易擺動,擺動的時間越長,反之擺動時間越短
new SpringAnimation(view, SpringAnimation.TRANSLATION_X)//X軸方向位移
.setSpring(spring)
.setStartValue(0)//初始值
.setStartVelocity(100)//開始速度
.start();
}
}, 500);
開始速度,dampingRatio,stiffness值,三個值相互影響

cda21039d72cf631ac24245b5e8dfa7.jpg
彈性效果入上圖繪制,這個效果不是很好,還要設置控件的距離,有點雞肋,不是咱程序員干的事情
2、如果不想要默認的可以直接設置插值器。對彈跳的值進行設置
ObjectAnimator objectAnimator = null;
objectAnimator = ObjectAnimator.ofFloat(view, "translationX", pageWidth, 0);
objectAnimator.setDuration(500);
objectAnimator.setInterpolator(new SpringScaleInterpolator());
objectAnimator.start();
public class SpringScaleInterpolator implements Interpolator {
private float factor;
public SpringScaleInterpolator(float factor) {
this.factor = factor;
}
@Override
public float getInterpolation(float x) {
return (float) (pow(2,1) * sin((x - factor / 4) * (2 * PI) / factor) );//pow的用法可以百度 這里用的是sin,你自己也可以判斷在小于0的時候就直接網上拋,這樣做就不會出現(xiàn)屏幕會被遮擋的情況
}
}

b7bc19e7ef4af0e6e1df79e4c710dda.jpg
這個圖騙過好一點,不過return (float) (pow(2,1) * sin((x - factor / 4) * (2 * PI) / factor) );
這個函數(shù)還在計算,明天給與答案,今天有點事情忙先