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