动画一个片段在另一个片段的顶部滑动?

时间:2018-03-30 05:02:23

标签: android android-fragments android-animation

我想在两个片段之间切换,以便新片段从旧片段顶部的底部滑入。滑动很简单,使用

<?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中这样做)。因此,当新片段在旧片段上滑动时,旧片段仍然可见,直到动画结束,然后它突然从背景中消失。

为了解决这个问题,我希望将旧片段剪切为#34;即它的高度应该是动画的,但它不应该缩放或移动。这应该产生正确的效果,但我不确定是否可以做到,如果可以,怎么做?

1 个答案:

答案 0 :(得分:1)

我遇到同样的问题,这是解决问题的解决办法,请尝试使用此代码,我认为这有助于您:

例如

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 class

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