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

Android Activity 上下滑動切換動畫實現詳解

     編輯:程式設計綜合問答

需求

A Activity 顯示時啟動 B Activity,B 從底部滑入覆蓋 A;返回時 B 從底部滑出,A 逐漸顯示。A 需保持不銷毀。

關鍵點

  1. B Activity 設為半透明主題,讓 A 可見。
  2. 使用 overridePendingTransition 定義進出動畫。
  3. 在 A 啟動 B 後、B 結束時分別呼叫。

實現步驟

1. 定義 B 的透明主題

<style name="TransparentActivity" parent="@android:style/Theme.Translucent.NoTitleBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

Manifest 套用:android:theme="@style/TransparentActivity"。

2. 動畫資源

res/anim/slide_in_bottom.xml(進場)

<translate xmlns:android="https://schemas.android.com/apk/res/android"
    android:fromYDelta="100%p" android:toYDelta="0%p"
    android:duration="300" />

res/anim/slide_out_bottom.xml(退場)

<translate xmlns:android="https://schemas.android.com/apk/res/android"
    android:fromYDelta="0%p" android:toYDelta="100%p"
    android:duration="300" />

3. A Activity 啟動 B

startActivity(new Intent(this, BActivity.class));
overridePendingTransition(R.anim.slide_in_bottom, R.anim.hold); // hold 為空動畫或 0

4. B Activity 結束(返回鍵或主動 finish)

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}

或在 onBackPressed 中同理。

補充:空動畫 hold.xml

<translate android:fromYDelta="0" android:toYDelta="0" android:duration="1" />

注意事項

  • 若 B 需完整覆蓋 A(不透明),則 A 不需透明主題,動畫同理。
  • Android 5.0+ 可用 ActivityOptions.makeCustomAnimation 替代 overridePendingTransition。
  • 避免在 onCreate 呼叫 overridePendingTransition,必須緊隨 startActivity 或 finish 之後。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved