在定義的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(); } |