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 变成菱形,因为半径太大的主要内容,如果未能解决你的问题,请参考以下文章