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


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