Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果目标位于重叠元素下方,则不平滑过渡动画_Android_Android Animation_Android Transitions - Fatal编程技术网

Android 如果目标位于重叠元素下方,则不平滑过渡动画

Android 如果目标位于重叠元素下方,则不平滑过渡动画,android,android-animation,android-transitions,Android,Android Animation,Android Transitions,我正在使用图像作为共享元素设置淡入淡出活动过渡的动画。目标容器应该部分隐藏在另一个元素下面,该元素具有app:behavior\u overlap,在本例中是嵌套的ScrollView。然而,在现实中,该元素在图像下方具体化,并在动画结束时突然重叠。这会产生一种不平滑的感觉,如下所示: 这是布局图: <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/

我正在使用图像作为共享元素设置淡入淡出活动过渡的动画。目标容器应该部分隐藏在另一个元素下面,该元素具有
app:behavior\u overlap
,在本例中是嵌套的ScrollView。然而,在现实中,该元素在图像下方具体化,并在动画结束时突然重叠。这会产生一种不平滑的感觉,如下所示:

这是布局图:

<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:expandedTitleMarginStart="48dp"
        app:expandedTitleMarginEnd="64dp"
        android:fitsSystemWindows="true">

        <com.mypackage.android.view.SquareImageView
            android:id="@+id/img"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="centerCrop"
            android:fitsSystemWindows="true"
            app:layout_collapseMode="parallax"
            android:transitionName="@string/trans_gallery_img"/>

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:layout_collapseMode="pin" />

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

<android.support.v4.widget.NestedScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    app:behavior_overlapTop="45dp"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    ... stuff
</android.support.v4.widget.NestedScrollView>

即使我使用Slide,它也会与下面的重叠元素在以相同方式结束之前滑动产生相同的效果。这将是一个很好的解决办法

要正确显示动画,将绘制
共享元素
,覆盖
无共享元素
,并在动画结束时返回到正常窗口的视图层次。 这意味着在动画过程中,
共享元素
将位于
嵌套滚动视图
上方,并在转换结束(
entertransformation
sharedelemententertransformation
)时突然返回到
嵌套滚动视图
下方的正常状态

我知道有两种方法可以解决这个问题:

1.-将android:WindowsSharedElementSuseOverlay=“false”添加到您的style.xml中:

动画不会覆盖其余视图,您只能在
折叠工具栏布局中看到动画

2.-等待共享元素转换结束,然后开始
嵌套滚动视图的
淡入
动画:

NestedScrollView
可见性设置为
不可见

  <android.support.v4.widget.NestedScrollView
    ...
    android:visibility="invisible"
    >

谢谢你的建议。实际上,仔细观察,动画元素覆盖了所有内容,包括左上角屏幕上的“向上”按钮。这发生在我和你的第二个gif上。这将是伟大的,如果您的淡入解决方案,可以使用在向上按钮也。
  <android.support.v4.widget.NestedScrollView
    ...
    android:visibility="invisible"
    >
getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() {

        ...

        @Override
        public void onTransitionEnd(Transition transition) {
            Animator anim   = ObjectAnimator.ofFloat(myNestedScrollView, "alpha", 0f, 1f);
            anim.setInterpolator(new DecelerateInterpolator());
            anim.setDuration(1000);
            ns.setVisibility(View.VISIBLE);
            anim.start();


        }

        ...

    });