Activity跳转可以带有一些转场动画,从一个Activity切换到另一个Activity,本文将介绍一个比较简单的实现方式。从一个Activity切换到另一个,或者执行Fragment转换的时候。
定义两个anim文件作为第一个Activity退出,第二个Activity进入的动画文件。
push_left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromXDelta="100%p"
android:toXDelta="0"/>
</set>
push_left_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromXDelta="0"
android:toXDelta="-100%p"/>
</set>
定义好文件后做动画的过程就很简单,我们只需要在startActivity调用之后添加我们的动画。
startActivity(new Intent(Intent.ACTION_VIEW, uri));
overridePendingTransition(R.anim.push_left_in,R.anim.push_left_out);
如果是Fragment的startActivity我们则需要拿到所在的Activity再调用overridePendingTransition,Fragment并没有这个方法。
点击进入可以正常进行动画,但退出的时候并没有动画。退出的动画需要在第二个Activity的finish方法中添加。我们需要再定义第二个Activity的退出和第一个Activity的进入动画。
push_right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromXDelta="0"
android:toXDelta="100%p"/>
</set>
push_right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromXDelta="-100%p"
android:toXDelta="0"/>
</set>
finish中添加动画
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out);
}
Fragment的页面转换动画与Activity略有不同,可以直接通过FragmentTransition指定使用默认的转换动画,也可以使用自定义的转换动画,但是要求一次指定四个动画,两个进入的动画,两个退出的动画,
使用默认的转换动画:
getSupportFragmentManager()
.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.replace(R.id.content_layout, new ShowRateFragment()).commit();
使用自定义的转换动画
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out, R.anim.push_right_in, R.anim.push_right_out)
.replace(R.id.content_layout, new ShowRateFragment()).commit();