TabHost中的Activity調用overridePendingTransition()方法無效

在定義的MyActivity中,繼承的是TabActivity,添加了幾個Activity,比如說A、B、C,採用了TabHost管理切換不同的主頁面。

現在A如果展示的是一個列表,點擊每一項,可以進入A的子頁面,這時候希望具有自定義的動畫效果,但是發現僅僅使用overridePendingTransition()卻沒有效果。

網上查閱了些資料,發現這個可以用,於是對其稍微整理了下,沒有深入分析,貼出來僅作參考。

原文鏈接:http://blog.sina.com.cn/u/2377683267

首先,要說的是ActivityA到ActivityB的切換這個相對簡單,只要overridePendingTransition(In,out)。這裏不就說了。但是這裏要說名的ActivityA不能TABHost裏面的一個。因爲Tabhost裏面有自己的Activity其實還沒有跳出Tabhost生命。這個可以Log,Tabhost生命週期試試就知道了。其實Tabhost裏面嵌套的Activity都在生命週期都在Tabhost裏面。這樣的話,Tabhost裏面的Activity跳轉到其他(非Tabhost裏面的Activity)時,調用overridePendingTransition(In,out)。其跳轉效果還是默認的,這麼句代碼的效果是不會出現的。

你點擊裏面的ListView的一個子項。跳出Tabhost你在點擊事件裏面調用overridePendingTransition(In,out)。是沒有用的。

現在解決這個問題:因爲Tabhost也有自己默認的overridePendingTransition()方法,我解決的方法是繼承TabActivity的Activity的onPause()方法裏調用overridePendingTransition(In,out)。In,out這個兩個參數放在一個類裏面。 這樣的話,就可以在要轉的地方調用修改這個兩個參數的方法。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class AnimationUtil {
 
    /**
     * anim中的佈局ID
     */
    public static int ANIM_IN = 0;
    /**
     * anim中的佈局ID
     */
    public static int ANIM_OUT = 0;
 
    /**
     * 通過動畫xml文件的id設置需要使用的動畫布局文件
     *
     * @param layoutIn
     * @param layoutOut
     */
    public static void setLayout(int layoutIn, int layoutOut) {
        ANIM_IN = layoutIn;
        ANIM_OUT = layoutOut;
    }
 
    /**
     * 設置id爲0
     */
    public static void clear() {
        ANIM_IN = 0;
        ANIM_OUT = 0;
    }
}

跳轉時的代碼:

?
1
2
3
Intent intent = new Intent(InformActivity.this, InformItemActivity.class);
AnimationUtil.setLayout(R.anim.zoom_enter,R.anim.zoom_exit);
startActivity(intent);

然後在繼承了TabActivity的類中,重寫onPause()方法:

?
1
2
3
4
5
6
7
8
9
@Override
    protected void onPause() {
        if (AnimationUtil.ANIM_IN != 0 && AnimationUtil.ANIM_OUT != 0) {
            super.overridePendingTransition(AnimationUtil.ANIM_IN,
                    AnimationUtil.ANIM_OUT);
            AnimationUtil.clear();
        }
        super.onPause();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章