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();
	}
相关文章
相关标签/搜索