繁体   English   中英

在动画期间将视图保持在顶部

[英]Keep View on top during animation

在活动转换期间,我无法将视图保持在最顶层。 卡片左边的图片是一个共享元素,可以扩展到第二个活动的一半,我有一个从底部滑入的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);
}

默认情况下,Android使用ViewOverlay进行活动转换。 这就是为什么共享元素被绘制在其他一切之上的原因。

您可以通过调用getWindow()来禁用它.setSharedElementsUseOverlay(false); 在开始转换之前。 这应该告诉Android在动画期间使用原始视图层次结构

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM