Android 使布局变暗以强调另一部分

Android make layout darker to emphasize another part

我想在屏幕中间的卡片视图中创建一个加载动画,我想强调卡片视图,所以我想让除了卡片视图之外的所有东西都暗一点。我怎样才能让我的布局更暗一点?

在图片中你可以看到我想要我的背景

我不能说这是正确的方法,但这就是我实现它的方式。

我通过制作背景为灰色 (#808080) 和 alpha 0~0.9(alpha 控制视图的透明度)的视图来实现此目的,当我需要使事物变暗并隐藏时,我会显示此视图(可见)它(消失)当我完成时。

为了控制它出现在所有其他视图之上,我使用高程属性(我认为以编程方式称为 TranslationZ)具有足够高的值以显示在所有其他视图之上,但没有我实际想要在屏幕前显示的那么高.

我的一个代码中的一个简单示例,我希望在单击时单个图像出现在 RecycleView 上方,当我需要显示图像时,我会将整个子约束布局设置为可见 invisible/Gone 当我不在时:

我的布局xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycle_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:elevation="2dp">

    </androidx.recyclerview.widget.RecyclerView>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/maximized_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        <View
            android:id="@+id/shade"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:background="#808080"
            android:alpha="0.9"
            android:elevation="3dp"
            />
        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:contentDescription="@string/image_basic_label"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:elevation="4dp"/>
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

当我需要在代码中显示时,我会这样做:

     maximizedContainer.setVisibility(View.VISIBLE);

其中 maximizedContainer 是子约束布局