线性布局中的两个片段淡出未按预期工作
fade out in two fragments in linearlayout not working as expected
我正在尝试使用一些动画来切换 2 个片段。如果我的布局只有一个片段,一切正常,但是当我一个接一个地添加两个片段时,这个转换就不起作用了。
我的activity布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="myapplication.ScrollingActivity"
tools:showIn="@layout/activity_scrolling">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:id="@+id/theMap"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<FrameLayout
android:id="@+id/MainFrame"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
现在我想更改MainFrame容器中的fragment,但是结果是fragment的淡出是错误的。第一个片段的内容比第二个长。过渡完成后,它会将第一个片段剪切为第二个片段的大小,然后完成淡入淡出效果。
我想要实现的是第一个片段在其整个高度淡出,然后使用动画在其高度添加第二个片段。
请注意,如果我没有 LinearLayout 并且只有 MainFrame,这会起作用,那么淡入淡出 out/fade 是正确的,但 LinearLayout(或约束布局)只会毁掉它。
这是转换代码:
private void performTransition()
{
if (isDestroyed())
{
return;
}
Fragment previousFragment = getSupportFragmentManager().findFragmentById(R.id.MainFrame);
Fragment nextFragment = BlankFragment2.newInstance();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
long FADE_DEFAULT_TIME = 2000;
Fade exitFade = new Fade();
exitFade.setDuration(FADE_DEFAULT_TIME);
previousFragment.setExitTransition(exitFade);
Fade enterFade = new Fade();
enterFade.setStartDelay(FADE_DEFAULT_TIME);
enterFade.setDuration(FADE_DEFAULT_TIME);
nextFragment.setEnterTransition(enterFade);
fragmentTransaction.replace( R.id.MainFrame, nextFragment);
fragmentTransaction.commitAllowingStateLoss();
}
要重现这个问题,只需创建一个新的android工作室项目,select滚动activity,然后添加3个空白片段,将长内容设置为一个片段的textView并观察行为。
如果 linearLayout 中有片段,如何在动画中实现适当的淡入淡出 out/fade?
解决方法是将android:fillViewport="true"设置为ScrollView,因为看起来scrollview先调整自己的大小然后剪切屏幕其余部分的动画。
我正在尝试使用一些动画来切换 2 个片段。如果我的布局只有一个片段,一切正常,但是当我一个接一个地添加两个片段时,这个转换就不起作用了。
我的activity布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="myapplication.ScrollingActivity"
tools:showIn="@layout/activity_scrolling">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:id="@+id/theMap"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<FrameLayout
android:id="@+id/MainFrame"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
现在我想更改MainFrame容器中的fragment,但是结果是fragment的淡出是错误的。第一个片段的内容比第二个长。过渡完成后,它会将第一个片段剪切为第二个片段的大小,然后完成淡入淡出效果。 我想要实现的是第一个片段在其整个高度淡出,然后使用动画在其高度添加第二个片段。
请注意,如果我没有 LinearLayout 并且只有 MainFrame,这会起作用,那么淡入淡出 out/fade 是正确的,但 LinearLayout(或约束布局)只会毁掉它。
这是转换代码:
private void performTransition()
{
if (isDestroyed())
{
return;
}
Fragment previousFragment = getSupportFragmentManager().findFragmentById(R.id.MainFrame);
Fragment nextFragment = BlankFragment2.newInstance();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
long FADE_DEFAULT_TIME = 2000;
Fade exitFade = new Fade();
exitFade.setDuration(FADE_DEFAULT_TIME);
previousFragment.setExitTransition(exitFade);
Fade enterFade = new Fade();
enterFade.setStartDelay(FADE_DEFAULT_TIME);
enterFade.setDuration(FADE_DEFAULT_TIME);
nextFragment.setEnterTransition(enterFade);
fragmentTransaction.replace( R.id.MainFrame, nextFragment);
fragmentTransaction.commitAllowingStateLoss();
}
要重现这个问题,只需创建一个新的android工作室项目,select滚动activity,然后添加3个空白片段,将长内容设置为一个片段的textView并观察行为。
如果 linearLayout 中有片段,如何在动画中实现适当的淡入淡出 out/fade?
解决方法是将android:fillViewport="true"设置为ScrollView,因为看起来scrollview先调整自己的大小然后剪切屏幕其余部分的动画。