我使用的支持库。 现在,我想有一个片段从底部转移,移动比前一个。
为此,我用它来保持现有的片段(正被滑动过一个)可见,直到新的片段是在它的地方:
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0" android:toAlpha="1.0"
android:duration="2500"
android:zAdjustment="bottom" />
这是用于新的片段中从底部到滑动动画:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="100%p" android:toYDelta="0"
android:duration="@android:integer/config_mediumAnimTime"
android:zAdjustment="top"/>
我已经把Z调整至底部和顶部两个,但仍是“底部”的动画仍然在新片段的顶部! 我已经把持续到2500进行测试,它停留在顶部的全部时间。
难道zAdjustment不是片段动画工作?
根据这个谷歌组线程Z调整仅适用于窗口动画。
“Z调整只适用于窗口动画。我认为这是记录在案,但显然不是。” - 黛安娜Hackborn(Android框架工程师)
您可以覆盖onCreateAnimation
方法和任何动画,你可以查阅一下动画当前正在运行,如果你需要它是在顶部,从那里设置Z轴。
override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
if (nextAnim == R.anim.enter_from_right || nextAnim == R.anim.exit_to_right) {
ViewCompat.setTranslationZ(view, 1f)
} else {
ViewCompat.setTranslationZ(view, 0f)
}
return super.onCreateAnimation(transit, enter, nextAnim)
}
建议实施此为您所有的片段一个片段基类。
我也卡住了这一问题。 因此,而不是使用transaction.replace(containerId, newFragment)
我已经创建了两个集装箱的片段,现在我的代码看起来是这样的一个
添加第一个片段:
transaction.add(containerId1, firstFragment).commit();
添加第二个片段动画在第一个:
findViewById(containerId2).bringToFront();
transaction.setCustomAnimations(R.anim.slide_in_up,
R.anim.stay).remove(oldFragment).add(containerId2, newFragment).commit()