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

Posted

技术标签:

【中文标题】如何将 circleimageview 保持在 CardView 之前?在约束布局?【英文标题】:How can I keep circleimageview ahead of a CardView? in ConstraintLayout? 【发布时间】:2021-10-01 02:30:32 【问题描述】:

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

但我的输出看起来像这样

这是我想与 RecylerView 一起使用的单行 XML

<?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_
android:layout_
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/backgroundColor">


<de.hdodenhof.circleimageview.CircleImageView
    android:id="@+id/circleImageView"
    android:layout_
    android:layout_
    android:src="@drawable/cat_placeholder"
    app:civ_border_color="@color/red"
    app:civ_border_
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<androidx.cardview.widget.CardView
    android:layout_
    android:layout_
    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>

【问题讨论】:

将 imageview 和 cardview 包裹在框架布局中并使用边距重叠 我尽力了,谢谢 它不起作用@YashJoshi CircleImageView 的海拔低于 50dp,因此您需要设置更高的海拔或使它们相同,但在 XML 中交换它们的声明。 【参考方案1】:

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

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

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

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

</FrameLayout>

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


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

【讨论】:

不客气。另外,我的回答中的一个更正:我认为 CardView 有一个单独的海拔属性(您在代码示例中拥有的那个;使用前请检查)。如果我上面的回复解决了您的问题,请将其标记为答案。谢谢。【参考方案2】:

android:elevation="55dp" 添加到您的图像视图

【讨论】:

不是 55dp,只有 5dp。 cardview 的高度为 50 dp,因此需要 50+5 @LalitFauzdar

以上是关于如何将 circleimageview 保持在 CardView 之前?在约束布局?的主要内容,如果未能解决你的问题,请参考以下文章

圆形头像CircleImageView和Cardview使用

Android之CircleImageView使用

android如何实现imageview默认是灰色,被点击后变成蓝色,(详情请看图片)并保持是蓝色

开源项目CircleImageView

圆形图片CircleImageView

安卓自定义圆形图片控件的使用(hdodenhof/CircleImageView)