我有一个传递共享元素动画的活动。它是一个基本的ImageView过渡,工作得很好。
现在,对于活动I中的其他元素,我希望有一个淡入淡出的动画。现在,这适用于所有元素,但视图组中的视图与ImageView(共享视图)相同。
我的布局如下。 ImageView位于CollapsingToolbarLayout和AppBarLayout中,我在oncreate中设置了这样的淡入淡出过渡:
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
super.onCreate(savedInstanceState);
Fade fade = new Fade(Fade.IN);
fade.setDuration(4000);
getWindow().setEnterTransition(fade);
setContentView(R.layout.article_details);
布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/article_details_collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="200dp"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="10dp"
app:expandedTitleMarginStart="10dp"
app:expandedTitleTextAppearance="@style/title_text_appearence"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/article_details_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:transitionName="imageTrans"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.6"
/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:theme="@style/AppTheme.ToolBar"
android:background="#0000"
app:layout_collapseMode="pin"
/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transitionGroup="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<WebView
android:id="@+id/article_details_webview"
android:layout_margin="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.FloatingActionButton
app:fabSize="mini"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"
android:src="@drawable/star_white"
android:layout_marginRight="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
所以,总结一下。嵌套滚动布局及其webview在设置时淡入,但AppBarLayout中的其他视图则不然。 AppBarLayout中的ImageView表现为共享元素应该(从传递的Activity移动到位)。此外,只有一半的FloatingActionButton被淡入,其余的在4秒的淡入淡出过后就会弹出。
编辑:我实际上遇到了和这个家伙一样的问题:Content Transitions on Top of Shared Elements in android
答案 0 :(得分:3)
我找到了解决这个&#34;问题的解决方案&#34;。问题是这是预期的行为。您可以通过调用
来禁用重叠getWindow().setSharedElementsUseOverlay(false);`
但通常会产生伪影。我最终做到了这一点,并删除了我的Activity背景,透明主题:
<style name="Theme.Transparent" parent="@style/AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
由于我的目标是淡化CollapsingToolbarLayout中的文本,我无法实现这一点,因为ImageView是布局的子级。我最终做的是添加另一个ImageView,其图像与活动之间的动画相同,并在Activity共享元素转换完成后将其与CollapsingToolbarLayout一起淡入。由于共享元素图像已经到位,因此新的ImageView在UI中没有任何区别。解决方案当然不是最优的,但是我的问题唯一一个 - 考虑API的行为方式。退出活动时,我只需隐藏替换的ImageView,用户就会看到共享元素图像在父活动中转换到位。