顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [AndroidStudio] 自訂換頁動畫 overridePendingTransition
時間 2016-01-11 Mon. 04:57:00


在文章列表點擊跳至文章閱讀頁,以及點了回上層跳回列表頁時
換頁動畫預設是使用淡入淡出
 

想要改成左移右移效果的話
Android預設就有提供從左邊滑進來的動畫
但從右邊滑進來的動畫要自己加上去

在 /res 新增一個 anim 的 Android resource directory
[圖]

[圖]


在 /res/anim 下新增兩個 Animation resource files

slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="100.0%p"
        android:toXDelta="0.0" />
</set>

slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="0.0"
        android:toXDelta="-100.0%p" />
</set>


修改文章列表頁的 Activity 類別
在成員函式 onItemClick() 裡,startActivity(intent);的下一行加上
        overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
讓新的頁面從右邊滑進來,舊的頁面從左邊滑出去


修改文章閱讀頁的 Activity 類別

自訂左上角回上層鍵的點擊事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        // Respond to the action bar's Up/Home button
        case android.R.id.home:
            finish();
            overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
在 finish(); 後加上
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
其中 android.R.anim.slide_in_left, android.R.anim.slide_out_right 是 Android 預設提供的
讓新頁面從左邊滑進來,舊的頁面從右邊滑出去


加上成員函式 onBackPressed()
    @Override
    public void onBackPressed(){
        super.onBackPressed();
        overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
    }
在點擊手機的回上頁按鈕,會執行
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);

執行結果
 



如果只是想關閉預設的淡入淡出動畫
只要在 startActivity(intent); 或 finish(); 後加上
overridePendingTransition(0,0);
即可

也可以在 startActivity(intent); 前加上
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);


--
※ 作者: Knuckles 時間: 2016-01-11 04:57:00
※ 編輯: Knuckles 時間: 2017-01-15 01:39:22
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 1809 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇