Android中Fragment和Activity的切换动画

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);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章