【问题标题】:android animation slide out left, reverse on backandroid动画向左滑出,背面反转
【发布时间】:2016-10-27 20:06:53
【问题描述】:

我正在尝试实现类似于 iOS 上的推送和弹出动画的效果。用户导航离开的片段应该向左滑出,用户导航到的片段应该从右侧滑入。当用户向后导航时(通过单击工具栏上的小箭头图标或按下设备上的后退按钮),动画应该反转; “弹出”的片段应该向右滑出,层次结构中的前一个片段应该从左侧滑回。所以实际上感觉就像你要往回走,沿着箭头所指的方向。不幸的是,我只能让第一部分发生;当用户返回时,前一个片段也(反直觉地)从右侧滑入,弹出的片段向左滑动! (完全反转到想要的效果)。

这是我的片段转换代码:

FragmentManager fManager = getSupportFragmentManager();
FragmentTransaction transaction = fManager.beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_left, R.anim.slide_out_right);
transaction.replace(R.id.wholeview, itemChoiceFragment, ItemChoiceFragment.class.getName());
transaction.addToBackStack("itemChoice");
transaction.commit();

这是我的动画 xml: slide_in_left.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="100%"
   android:toXDelta="0"
   android:interpolator="@android:anim/decelerate_interpolator"
   android:duration="400"/>
</set>

slide_out_right.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="0"
   android:toXDelta="-100%"
   android:startOffset="100"
   android:interpolator="@android:anim/decelerate_interpolator"
   android:duration="300"/>
</set>

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: android android-fragments android-animation


    【解决方案1】:

    代替

    transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_left, R.anim.slide_out_right);
    

    使用

    transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_right, R.anim.slide_out_left);
    

    R.anim.slide_in_right 的位置

    <?xml version="1.0" encoding="utf-8"?>
       <set xmlns:android="http://schemas.android.com/apk/res/android">
       <translate xmlns:android="http://schemas.android.com/apk/res/android"
       android:fromXDelta="-100%"
       android:toXDelta="0"
       android:interpolator="@android:anim/decelerate_interpolator"
       android:duration="400"/>
       </set>
    

    和 R.anim.slide_out_left

     <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:toXDelta="100%"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:duration="300"/>
    </set>
    

    这个方法的参数是

    setCustomAnimations(int enter, int exit, int popEnter, int popExit)
    

    基本上是这样

    -进入时从右向左滑动新片段

    -离开当前片段时向左滑出

    -点击返回时从左向右滑动旧片段

    -单击返回时将当前片段向右滑动

    根据方法描述

    FragmentTransaction setCustomAnimations (int enter, 
                int exit, 
                int popEnter, 
                int popExit)
    

    为在此事务中进入和退出的片段设置要运行的特定动画资源。 popEnter 和 popExit 动画将播放进入/退出操作,特别是在弹出返回堆栈时。

    【讨论】:

      【解决方案2】:

      您可以像这样使用 Visibility 类(Slide 的超类):

      Slide slideTransition = new Slide(fromRightToLeft ? Gravity.END : Gravity.START);
              slideTransition.setDuration(GlobalConstants.TRANSITION_ANIMATION_DURATION);
              fragment.setEnterTransition(slideTransition);
      

      Here 是完整指南

      【讨论】:

      • 感谢他在这个问题上浪费了太多时间后帮助了我
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2011-07-06
      相关资源
      最近更新 更多