Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从下到上,在上一个片段的上方设置片段动画_Java_Android_Android Fragments_Android Animation - Fatal编程技术网

Java 从下到上,在上一个片段的上方设置片段动画

Java 从下到上,在上一个片段的上方设置片段动画,java,android,android-fragments,android-animation,Java,Android,Android Fragments,Android Animation,我想在上一个片段的基础上,自下而上制作一个新片段的动画 不幸的是,我当前的实现将上一个片段向上推,因为新片段正在动画中,如下所示: 我想要它做的是让新片段在前一个片段的基础上进行动画制作,如下所示: 下面是我的代码现在的样子: private void pushFragment(String fragmentTag, Fragment fragment) { FragmentTransaction fragmentTransaction = getSupportFra

我想在上一个片段的基础上,自下而上制作一个新片段的动画

不幸的是,我当前的实现将上一个片段向上推,因为新片段正在动画中,如下所示:

我想要它做的是让新片段在前一个片段的基础上进行动画制作,如下所示:

下面是我的代码现在的样子:

    private void pushFragment(String fragmentTag, Fragment fragment) {
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.anim_in_test, R.anim.anim_out_test);
        fragmentTransaction.replace(
                R.id.fragment_container,
                fragment,
                fragmentTag);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commitAllowingStateLoss();
    }
下面是
anim\u in\u test.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="100%p"
        android:toYDelta="0" />
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="0%p"
        android:toYDelta="-100%p"
        />
</set>

我需要做哪些更改才能正常工作?

只需使用添加片段而不是替换片段

 setCustomAnimations(int enter, int exit)
退出动画应该为空(因为当新片段出现时,需要旧片段留在屏幕上),但如果将0传递给第二个参数视图,则在不显示动画的情况下,退出动画。这就是我添加空alpha动画的原因,它将alpha从1更改为1

fragmentTransaction.setCustomAnimations(R.anim.anim_in_test, R.anim.anim_out_test);
anim_out_test.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="@android:integer/config_longAnimTime"
        android:fromAlpha="1"
        android:toAlpha="1" />
</set>
结果如下:

它是有效的,但我不知道这个解决方案的副作用。在安卓4上,我认为可以通过自定义
ViewGroup
作为片段容器来完成,它以相反的顺序绘制子对象

 @Override
 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.view, container, false);
        view.setZ(value);