【问题标题】:fade out in two fragments in linearlayout not working as expected在线性布局中淡出两个片段未按预期工作
【发布时间】:2018-01-15 14:59:53
【问题描述】:

我正在尝试使用一些动画来切换 2 个片段。如果我的布局只有一个片段,那么一切正常,但是当我一个接一个地添加两个片段时,这种过渡就不起作用了。

我的活动布局:

<?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 容器中的片段,但是结果是片段的淡出是错误的。第一个片段的内容比第二个片段长。过渡完成后,它将第一个片段切割成第二个片段的大小,然后完成淡入淡出效果。 我想要实现的是第一个片段在其全高度淡出,然后使用动画将第二个片段添加到其高度。

请注意,如果我没有 LinearLayout 并且只有 MainFrame,则此方法有效,那么淡出/淡入是正确的,但 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 studio项目,选择Scrolling activity,然后添加3个空白片段,将长内容设置为一个片段的textView并观察行为。

如果linearLayout中有片段,如何正确淡出/淡出动画?

【问题讨论】:

  • 你指的是哪个“长内容”?你想达到什么目的?有两个全屏片段并从一个滚动到另一个片段,而其中一个片段可以与第三个片段切换?
  • 长内容 - textView 中的文本在一个片段中。我在一个屏幕上有 2 个片段,片段 A 和 B,A 在 B 上方。片段具有固定高度。片段 B 具有可变高度(这就是为什么我将它们放在滚动视图中)。现在我想将片段 B 更改为片段 C,片段 C 的内容很短 - 只有 1 行文本,这是错误行为发生的地方。
  • 它是否适用于LinearLayout,但没有动画?
  • 是的,片段被改变了,这不是问题,问题是动画被切割成较小片段的大小,或者更好的说是下一个片段
  • android:layout_height="wrap_content"in 你的FrameLayout 不会做这项工作?

标签: android android-layout android-fragments android-animation


【解决方案1】:

解决方案是将 android:fillViewport="true" 设置为 ScrollView,因为滚动视图似乎首先调整自身大小并在屏幕的其余部分剪切动画。

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多