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

时间:2017-04-12 20:21:11

标签: android android-fragments android-elevation

我在我的片段之间使用动画:

从左侧滑入:

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

当新片段滑到旧片段之下时,我遇到了麻烦,为了解决这个问题,我对我的新片段进行了提升,但是我想要一个21以下的API解决方案。 是否可以强制新片段高于旧片段

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您在新片段上使用android:elevation属性(如果没有,请随时写下您的方法) - 尽管它只适用于Lollipop及以上,正如您所提到的那样。但是,根据下面的链接主题,有几种方法可以实现对Lollipop前设备的提升效果。

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

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

当我在主题中稍微搜索一下时,有一些有趣的例子,其中一个新片段与旧片段重叠,它们列在下面。前两个示例需要一些特殊的布局设计和现有视图类的扩展,但也许其中一个是您正在寻找的。

此外(没有源代码)我可以建议你两种方式:

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

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

答案 1 :(得分:0)

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

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