首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 動畫平移視圖並保持終止位置:setFillAfter 與 setFillEnabled

     編輯:程式設計綜合問答

問題

TranslateAnimation 執行結束後視圖彈回原位,因為動畫預設不改變視圖實際佈局屬性。

解決

Animation anim = AnimationUtils.loadAnimation(this, R.anim.slide_left_to_right);
// 關鍵兩行
anim.setFillAfter(true);    // 保持動畫結束狀態
anim.setFillEnabled(true);  // 啟用 fillAfter
view.startAnimation(anim);

動畫 XML (res/anim/slide_left_to_right.xml)

<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>

現代替代:ViewPropertyAnimator (API 12+)

view.animate()
    .translationX(0)
    .setDuration(700)
    .setInterpolator(new DecelerateInterpolator())
    .start();
// 直接改變視圖屬性,無需 fillAfter,效能更好

ObjectAnimator (API 11+)

ObjectAnimator.ofFloat(view, "translationX", -view.getWidth(), 0)
    .setDuration(700)
    .start();

注意

  • setFillAfter 僅影響繪製,視圖實際 getLeft()/getTop() 不變,點擊區域仍在原位。需真正移動佈局請用 ViewPropertyAnimator、ObjectAnimator 或手動更新 LayoutParams。
  • 動畫結束後若需互動,務必用屬性動畫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved