在定義的MyActivity中,繼承的是TabActivity,添加了幾個Activity,好比說A、B、C,採用了TabHost管理切換不一樣的主頁面。 java
如今A若是展現的是一個列表,點擊每一項,能夠進入A的子頁面,這時候但願具備自定義的動畫效果,可是發現僅僅使用overridePendingTransition()卻沒有效果。 ide
網上查閱了些資料,發現這個能夠用,因而對其稍微整理了下,沒有深刻分析,貼出來僅做參考。
佈局
原文連接: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)。其跳轉效果仍是默認的,這麼句代碼的效果是不會出現的。 this
你點擊裏面的ListView的一個子項。跳出Tabhost你在點擊事件裏面調用overridePendingTransition(In,out)。是沒有用的。 spa
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; } }
跳轉時的代碼: code
Intent intent = new Intent(InformActivity.this, InformItemActivity.class); AnimationUtil.setLayout(R.anim.zoom_enter,R.anim.zoom_exit); startActivity(intent);
而後在繼承了TabActivity的類中,重寫onPause()方法: orm
@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(); }