通常,在应用开发过程中,为了美观和炫酷,可以设定每个Activity切换的时候的效果,比如旋转进入,或者是从上面下面,左边右边进入之类的。这里记录一下如何通过overridePendingTransition函数实现切换效果。
实现切换效果主要在两个地方进行处理。一:在startActivity后进行设置一次,Activity启动效果。二:在onBackPressed中进行一次设置,设置Activity返回效果。代码如下:
启动一个Activity:
Toast.makeText(MainActivity.this, "清除缓存", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, ClearCache.class);
startActivity(intent);
overridePendingTransition(<span style="color:#FF0000;">R.anim.translate_vertical_in</span>, <span style="color:#FF0000;">R.anim.translate_vertical_out</span>);
其中R.anim.translate_vertical_in和 R.anim.translate_vertical_out 分别为启动Activity进入的效果和当前Activity退出效果。
R.anim.translate_vertical_in为Activity进入的效果,从下方移动出来,相应R.anim.translate_vertical_out为当前Activity移出效果。
<span style="color:#33CC00;"><?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="100%"
android:toYDelta="0"
android:duration="500"
/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="-100%"
android:duration="500"
/>
</set></span>
同时,在Activity返回的时候,也应该处理过渡效果。处理onBackPressed消息
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
overridePendingTransition(R.anim.translate_vertical_return_in, R.anim.translate_vertical_return_out);
}
其中R.anim.translate_vertical_return_in, R.anim.translate_vertical_return_out分别是在Activity退出的时候,当前Activity退出的效果和之前Activity进入的效果。
R.anim.translate_vertical_return_in为之前Activity进入的效果,
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="-100%"
android:toYDelta="0"
android:duration="500"
/>
</set>
R.anim.translate_vertical_return_out为当前Activity淡出的效果。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="100%"
android:duration="500"
/>
</set>
这里的效果都是一种Animation,这里的实现比较简单,只有简单的translate,如果需要复杂的效果,可以在set中添加多个效果,在运行的时候,AnimationSet会将之内的所有的Animation效果进行执行。