Android - CardView 变成菱形,因为半径太大

Posted

技术标签:

【中文标题】Android - CardView 变成菱形,因为半径太大【英文标题】:Android - CardView becomes a diamond shape because radius too large 【发布时间】:2021-10-02 13:11:30 【问题描述】:

我在我的应用程序中使用android.widget.CardView

在我的Android 11设备中,当radius大于View时,会自动调整为View的一半大小。(不知道是哪个版本调整的)

在较低的系统版本(我使用Android 7.1测试),当半径大于View时,CardView会变成菱形。

有人知道为什么以及如何解决吗?谢谢

【问题讨论】:

对我来说这与 CardView 无关,屏幕截图中的问题似乎与您的 ImageView 或显示作者图标的类似问题有关 使用任何 roudedImageview 来制作像implementation 'com.makeramen:roundedimageview:2.3.0' 这样的圆圈,而不是 CardView。探索Liberary Link 它适用于大多数设备,实际上我见过这种行为的唯一设备是运行 android 7 的华为 Mate 9(我不知道华为和夏莫有什么问题,他们总是很烦人 -_ -)。我设法通过在代码中将角​​设置为高度的一半来解决这个问题 【参考方案1】:

Glide 库通常用于加载图像。这个库可以帮助圆边如下

Glide.with(context)
        .load(url)
        .circleCrop()
        .into(imageView)

与这个图书馆交朋友,你会很开心。不仅帮助图像成型,还能正确使用内存https://github.com/bumptech/glide

P.S:在我看来,使用 CardView 对你来说是非常有限的。

您可以将其用作根元素,例如约束布局,并使用您喜欢的圆形(矩形)作为背景并将您的图像放置在布局内。

为了保持形状,我经常使用下一个属性(示例如下): app:layout_constraintDimensionRatio="W,1:2".

在您的情况下,比例必须为 1:1,因为它是圆形而不是椭圆,那么您可以使用 app:layout_constraintDimensionRatio="W,1:1"app:layout_constraintDimensionRatio="H,1:1"

我不确定这在 CardView 中是否有效,但在 ConstraintLayout 中效果很好。

【讨论】:

【参考方案2】:

这是在 XML 中使用 android 中的卡片视图使图像获得圆形边框的常见且最简单的方法之一

首先在您的 XML 中创建一个卡片视图,并在其中创建一个宽度和高度都比卡片视图小 1dp 的图像视图,然后尝试根据您的要求调整 cardCornerRadius,就是这么简单那个。

我在这里使用androidx.cardview.widget.CardView

<androidx.cardview.widget.CardView
            android:layout_
            android:layout_
            app:cardCornerRadius="35dp"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true">

            <ImageView
                android:id="@+id/rounded_profile_img"
                android:layout_
                android:layout_
                android:scaleType="centerCrop"/>

        </androidx.cardview.widget.CardView>

谢谢你希望你会喜欢它,它对每个人都有帮助。

【讨论】:

以上是关于Android - CardView 变成菱形,因为半径太大的主要内容,如果未能解决你的问题,请参考以下文章

如何画类图 怎样把空心菱形变成实心菱形

如何检索元素父容器的属性

Android - MD之CardView的使用

Android CardView 实现

Android开发之CardView的使用

Android基础控件——CardView的使用仿支付宝银行卡