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();
}
...
});