退出动画不工作; FragmentTransaction自定义动画不适用于隐藏

Leo*_*o K 9 android android-animation android-fragments fragmenttransaction

我使用show/hide来显示占据屏幕一部分的片段.出于某种原因,当显示片段时,slide_in_left动画播放,但是当片段被隐藏时没有动画,片段就会消失.我已经使用试过slide_in_left两个动画exitenter,这并没有帮助.当将代码跟踪到支持包中时,动画确实被创建并且正在执行用于显示它的代码.(我跟踪了.hide电话)

FragmentManager fm = _activity.getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.my_fragment);
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left);
if (fragment.isHidden()) {
    ft.show(fragment);
    fragment.setUserVisibleHint(true);
} else {
    ft.hide(fragment);
}
ft.commit();
Run Code Online (Sandbox Code Playgroud)

以防万一这里是slide_out_left动画的xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-50%p"
        android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>
Run Code Online (Sandbox Code Playgroud)

编辑: 问题可能与my_fragment分享屏幕宽度与另一个包含webview的片段的事实有关.当为my_fragment执行.show时,它变为可见并在水平线性布局内共享空间(两个片段中的每一个占用多少屏幕宽度由权重参数确定).

小智 20

尝试使用setCustomAnimations(int enter,int exit,int popEnter,int popExit)而不是setCustomAnimations(int enter,int exit)当你调用popupbackstack退出动画时不会被调用


Chr*_*ins 4

就我个人而言,这是片段动画 zPosition 的一个错误。

您看到的是新片段“出现”,这是因为新片段附加在当前片段下方。

因此,当尝试在现有片段的“上方”对片段进行动画处理时,似乎什么都没有发生,然后新片段就“出现”了。

我已经尝试了很多解决方法,使用 zPosition (仅影响窗口而不影响布局,因此对片段没有影响),onAnimationCreate()将根布局置于前面,甚至在动画开始和停止时......似乎什么也没做。

因此,在这个时间点上,如果没有为片段过渡编写完整的自定义动画,它们目前有点错误。

你可能需要玩一下。.add(Fragment)等待它被添加,然后调用.remove(Fragment)删除旧片段,这样新片段就会物理地放置在现有片段的顶部。