【问题标题】:How to set slide out transition for fragment如何为片段设置滑出过渡
【发布时间】:2018-04-10 19:45:59
【问题描述】:

我正在为进入片段和退出应用过渡集,我想应用滑出动画,我该怎么做,这是我的代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    productDetailFragment.setSharedElementEnterTransition(new DetailsTransition());
    productDetailFragment.setEnterTransition(new Fade());
    productDetailFragment.setExitTransition(new Slide(Gravity.RIGHT));
}
((MainActivity)context).getSupportFragmentManager()
                       .beginTransaction()
                       .replace(R.id.fragment, productDetailFragment)
                       .addSharedElement(viewHolder.iv, "kittenImage")
                       .addToBackStack(null)
                       .commit();

【问题讨论】:

标签: android android-animation shared-element-transition


【解决方案1】:

请检查以下代码以了解适用于片段转换的自定义动画:

getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations( R.anim.slide_up, 0, 0, R.anim.slide_down)
        .show( m_topFragment )
        .commit();

slide_up.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationY"
        android:valueType="floatType"
        android:valueFrom="1280"
        android:valueTo="0"
        android:duration="@android:integer/config_mediumAnimTime"/>

slide_down.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationY"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="1280"
        android:duration="@android:integer/config_mediumAnimTime"/>

上面我正在向您展示 slide_up 和 down 过渡,但您可以使用左右和任何自定义 objectAnimator 将动画显示到您的片段过渡时间,希望它对您有所帮助。

【讨论】:

    【解决方案2】:

    试试这样的。!愿这对你有用。! Fragment Transaction Example

    Using Slide Example

    FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
    
    Fade exitFade = new Fade();
    exitFade.setDuration(FADE_DEFAULT_TIME);
    previousFragment.setExitTransition(exitFade);
    

    Transition slideTransition = new Slide(Gravity.BOTTOM);
    Transition fadeTransition = new Fade();
    TransitionSet set = new TransitionSet();
    set.addTransition(slideTransition);
    set.addTransition(fadeTransition);
    

    【讨论】:

    【解决方案3】:

    调用片段

    FragmentManager fragmentManager = getSupportFragmentManager();
    boolean fragmentPopped = fragmentManager.popBackStackImmediate("OtpFragment", 0);
    Fragment fragment = null;
    Bundle b = new Bundle();
    
    if (!fragmentPopped && fragmentManager.findFragmentByTag("OtpFragment") == null) {
        fragment = new OtpFragment();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_from_left);
        transaction.replace(R.id.frame_container, fragment, "OtpFragment")
                   .addToBackStack("OtpFragment")
                   .commit();
    }
    

    res 文件夹中创建 anim 目录: 现在为进入/退出动画创建两个单独的文件:即 R.anim.enter_from_rightR.anim.exit_from_left

    进入幻灯片动画:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:fromXDelta="100%" android:toXDelta="0%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="300" />
    </set>
    

    退出侧边动画:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
    <translate
        android:fromXDelta="0%" android:toXDelta="-100%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="300"/>
    </set>
    

    【讨论】:

    • 如果我们想使用 setExitTransition 设置呢?
    • 不确定,但是:transaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_from_left); 对我有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    相关资源
    最近更新 更多