我想在两个片段之间切换,以便新片段从旧片段顶部的底部滑入。使用
的滑动非常直截了当<?xml version="1.0" encoding="utf-8"?>
<set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="100%"
android:toYDelta="0"
android:interpolator="@android:anim/decelerate_interpolator"
android:duration="200"/>
</set>
和 FragmentTransaction.setCustomAnimations()
。
问题在于我的片段没有坚实的背景(我在具有半透明背景的DrawerLayout
中这样做(。因此,当新片段滑落在旧片段的顶部时,旧片段仍然可见,直到动画完成为止,因此它突然从背景中消失了。
要解决这个问题,我希望"剪辑"旧片段,即,它的高度应该是动画的,但不应缩放或移动。这应该产生正确的效果,但我不确定是否可以完成,如果是这样,该怎么做?
我正面临同样的问题,这是我解决问题的解决方案,请尝试此代码,我认为它可以帮助您:
例如
xml.layout
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate android:duration="150" android:fromXDelta="100%p"
android:interpolator="@android:anim/linear_interpolator"
android:toXDelta="0" />
</set>
Java类
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
MyFragment next = getMyFragment();
ft.add(R.id.MyLayout,next);
ft.setCustomAnimations(R.anim.slide_in_right,0);
ft.show(next);
ft.commit();
它可以罚款,但较旧的片段仍然可见,使用此行,在动画过程中不可见。
ft.remove(myolderFrag);