Android 片段动画期间新片段出现在旧片段下方

Android new fragment appears below old one during fragment animation

我在片段之间使用动画 :

从左边滑入:

<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="600"
    android:propertyName="x"
    android:valueFrom="2000"
    android:valueTo="0"
    android:valueType="floatType"
    android:fillAfter="true"/>
</set>

从右边滑入:

<?xml version="1.0" encoding="utf-8"?>
<set>
    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="600"
        android:propertyName="x"
        android:valueFrom="0"
        android:valueTo="-400"
        android:valueType="floatType"/>
</set>

此动画将前一个片段移到左侧,新片段移到右侧。我将它与片段交易一起使用。

transaction.setCustomAnimations(R.animator.slide_in_from_left,R.animator.slide_in_from_right);

当新片段滑到旧片段下方时我遇到了麻烦,为了解决这个问题,我在我的新片段上设置了高度,但我想要 API 低于 21 的解决方案。 是否可以强制新片段在旧片段之上

如果我理解正确,你在新片段上使用了 android:elevation 属性(如果没有,请随意写下你的方法)——尽管它只适用于 Lollipop 及更高版本,正如你也提到的.但是,根据下面的链接主题,有几种方法可以在 Lollipop 之前的设备上实现提升效果。

"android:elevation=" doesn't work on devices pre-Lollipop with compile API21


第一次评论后编辑: 好的,很抱歉误解了您的问题...:)

当我在主题中搜索一点点时,有一些有趣的例子,新片段与旧片段重叠,如下所列。前 2 个示例需要一些特殊的布局设计和现有视图的扩展 classes,但也许其中之一就是您正在寻找的。

此外(没有源代码)我可以建议您另外 2 种方法:

  • 您搜索的动画可以通过使用完美实现 显示 UI 和 startActivity(intent) 之后 activity 内的 overridePendingTransition() 方法。但是,如果 如果你真的想使用片段,也许你会跳过这个。
  • 最后(也是我认为最简单的)解决方案可能是通过添加新片段来重叠旧片段 片段而不是替换它。但是我认为这是最糟糕的 解决方案,因为可能存在内存使用问题(较旧 片段不会被删除,只是被更新的片段简单地淡化了。

我希望我能帮上忙...:)

如果片段出现在另一个片段下方是因为片段容器不是好的容器类型

你需要将fragment放在FrameLayout或RelativeLayout中,如果你想测试你可以将你的fragment布局代码粘贴到fragment容器的底部进行预览