在定义的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)。是没有用的。
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();
}
|