Fragment的切换(Replace的动画效果)
首先要有Fragment的进入动画和退出动画,如下(在android目录的res/anim中)
fragment_left_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="-100%p" />
</set>
fragment_right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="300"
android:fromXDelta="100%p"
android:toXDelta="0"/>
</set>
接下来为使用动画的代码:
public void changeFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.side_right_in,R.anim.side_left_out);
if (!fragment.isAdded()) {
transaction.hide(currentFragment).add(R.id.main_dis_fl, fragment).commit();
} else {
transaction.hide(currentFragment).show(fragment).commit();
}
currentFragment = fragment;
}
之后就可以实现Fragment的切换动画了,但是感觉无论怎么点击选项卡,Fragment都向同一方向切换比较诡异
So,想出如下办法,再增加两个Xml布局文件如下:
fragment_left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="-100%p"
android:toXDelta="0" />
</set>
fragment_right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="100%p"/>
</set>
实现代码变为如下:
public void changeFragment(Fragment fragment,int currId,int forntId) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if(currId > forntId) {
transaction.setCustomAnimations(R.anim.side_right_in, R.anim.side_left_out);
}else{
transaction.setCustomAnimations(R.anim.side_left_in, R.anim.side_right_out);
}
if (!fragment.isAdded()) {
transaction.hide(currentFragment).add(R.id.main_dis_fl, fragment).commit();
} else {
transaction.hide(currentFragment).show(fragment).commit();
}
currentFragment = fragment;
}
OK,大功告成
Activity的切换
Activity的切换和Fragment较相似,看如下代码估计都能明白:
Intent intent=new Intent(this,MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.right_in,R.anim.left_out);