android动画向左滑动​​,向后滑动

Cas*_*ins 3 android android-animation android-fragments

我正在尝试实现类似于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();
Run Code Online (Sandbox Code Playgroud)

这是我的动画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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

谢谢。

Chr*_* K. 8

代替

transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_left, R.anim.slide_out_right);
Run Code Online (Sandbox Code Playgroud)

使用

transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_right, R.anim.slide_out_left);
Run Code Online (Sandbox Code Playgroud)

其中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>
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

该方法中的参数是

setCustomAnimations(int enter, int exit, int popEnter, int popExit)
Run Code Online (Sandbox Code Playgroud)

所以基本上

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

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

单击时从左向右滑动旧片段

在单击时将当前片段向右滑动

按照方法说明

FragmentTransaction setCustomAnimations (int enter, 
            int exit, 
            int popEnter, 
            int popExit)
Run Code Online (Sandbox Code Playgroud)

设置特定的动画资源以针对在此事务中进入和退出的片段运行。popEnter和popExit动画将在进入后退堆栈时播放,以进行进入/退出操作。