如何让 circleimageview 保持在 CardView 之前?在约束布局?

How can I keep circleimageview ahead of a CardView? in ConstraintLayout?

我想以 CircleImageView 领先于 CardView 的方式显示输出

但是我的输出是这样的

这是我的单行 XML,我想将其与 RecylerView

一起使用
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/backgroundColor">


<de.hdodenhof.circleimageview.CircleImageView
    android:id="@+id/circleImageView"
    android:layout_width="90dp"
    android:layout_height="90dp"
    android:src="@drawable/cat_placeholder"
    app:civ_border_color="@color/red"
    app:civ_border_width="2dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<androidx.cardview.widget.CardView
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="32dp"
    app:cardElevation="50dp"
    app:layout_constraintBottom_toBottomOf="@+id/circleImageView"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="@+id/circleImageView"
    app:layout_constraintTop_toTopOf="@+id/circleImageView" />


    </androidx.constraintlayout.widget.ConstraintLayout>

android:elevation="55dp" 添加到您的 imageView

考虑将 CardViewCircleImageView 包装在 FrameLayout 中。此外,以您希望它们出现的方式为两个视图设置 android:elevation 属性。

<FrameLayout
    android:id="@+id/some_container"
    android:layout_width="..."
    android:layout_height="..."
    ... >

    <CardView
        android:id:"@+id/card"
        android:layout_width="..."
        android:layout_height="..."
        android:elevation="..."
        ...
        ... />

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/circleImageView"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:src="@drawable/cat_placeholder"
        android:elevation="..."
        ...
        ... />

</FrameLayout>

不要忘记查看 FrameLayout documentation 以了解如何最好地使用它。 (另外,请记住 CardView 本身就是 FrameLayout。)


此外,我建议您关注项目的 minSdkVersionelevation 属性 在 API 21+ 中可用。您的应用不会在较低 API 设备上崩溃,但您可能无法获得所需的外观。强烈考虑使用 FrameLayout 实现重叠,或尝试设计自定义视图或使用某些库,例如用于模拟高程的阴影。