TranslateAnimation 執行結束後視圖彈回原位,因為動畫預設不改變視圖實際佈局屬性。
Animation anim = AnimationUtils.loadAnimation(this, R.anim.slide_left_to_right);
// 關鍵兩行
anim.setFillAfter(true); // 保持動畫結束狀態
anim.setFillEnabled(true); // 啟用 fillAfter
view.startAnimation(anim);
<set xmlns:android="https://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="-100%"
android:toXDelta="0%"
android:duration="700"
android:interpolator="@android:anim/decelerate_interpolator" />
</set>
view.animate()
.translationX(0)
.setDuration(700)
.setInterpolator(new DecelerateInterpolator())
.start();
// 直接改變視圖屬性,無需 fillAfter,效能更好
ObjectAnimator.ofFloat(view, "translationX", -view.getWidth(), 0)
.setDuration(700)
.start();
setFillAfter 僅影響繪製,視圖實際 getLeft()/getTop() 不變,點擊區域仍在原位。需真正移動佈局請用 ViewPropertyAnimator、ObjectAnimator 或手動更新 LayoutParams。