在活动转换期间,我无法将视图保持在最顶层。卡片左边的图片是一个共享元素,可以扩展到第二个活动的一半,我有一个从底部滑入的FAB。我将饮料的ImageView作为共享元素转换,FAB是从底部的幻灯片转换。
在FAB的幻灯片动画期间,它会保持在ImageView下方,如第二张图片所示。然而,在完成动画制作后,它会弹出ImageView的顶部,如第三张图所示。我在退出过渡期间遇到了同样的问题,它在ImageView开始滑动时会立即弹出。
我希望FAB在整个过程中始终处于ImageView之上,我该如何实现呢?
MainActivity:
FAB仍在滑动时的辅助活动:
FAB完成滑动时的辅助活动:
辅助活动的XML文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/drinkImage"
android:layout_width="match_parent"
android:layout_height="300dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:gravity="start"
android:transitionName="@string/drink_image_transition"
/>
<TextView
android:padding="8dp"
android:id="@+id/drinkName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:translationY="@dimen/detail_drink_name_vertical_offset"
android:textSize="24sp"
android:textColor="@color/text_primary"
android:transitionName="@string/drink_name_transition"
/>
<ImageButton
android:id="@+id/fab"
android:layout_width="@dimen/fab_size_normal"
android:layout_height="@dimen/fab_size_normal"
android:layout_margin="@dimen/add_button_margin"
android:translationX="@dimen/detail_fab_horizontal_offset"
android:translationY="@dimen/detail_fab_vertical_offset"
android:background="@drawable/fab_shape"
android:elevation="@dimen/elevation_low"
android:src="@drawable/fab_ic_add"
android:stateListAnimator="@anim/button_elevation"
android:transitionName="fab_transition"
/>
</RelativeLayout>
辅助活动的onCreate()方法:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.details_drink);
//grab Drink parcel
Drink d = getIntent().getParcelableExtra("drink");
//set up image
ImageView i = (ImageView) findViewById(R.id.drinkImage);
i.setImageDrawable(this.getResources().getDrawable(d.getImageResourceID(this)));
//set up text
TextView t = (TextView) findViewById(R.id.drinkName);
t.setText(d.name);
Transition ts = new Slide();
//don't want status bar and navigation bar to slide across screen
ts.excludeTarget(android.R.id.statusBarBackground, true);
ts.excludeTarget(android.R.id.navigationBarBackground, true);
ts.setDuration(3000);
getWindow().setEnterTransition(ts);
getWindow().setExitTransition(ts);
//This line gets it to work! As Pavel suggested
//getWindow().setSharedElementsUseOverlay(false);
}
答案 0 :(得分:2)
默认情况下,Android使用ViewOverlay进行活动转换。这就是为什么共享元素被绘制在其他一切之上的原因。
您可以在开始转换之前调用getWindow().setSharedElementsUseOverlay(false);来禁用此功能。这应该告诉Android在动画期间使用原始视图层次结构