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

在定義的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

如今解決這個問題:由於Tabhost也有本身默認的overridePendingTransition()方法,我解決的方法是繼承TabActivity的Activity的onPause()方法裏調用overridePendingTransition(In,out)。In,out這個兩個參數放在一個類裏面。 這樣的話,就能夠在要轉的地方調用修改這個兩個參數的方法。
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();
	}
相關文章
相關標籤/搜索