Android切圆角的几种常见方式总结
总结一下常用的方式
- 设置backgroud Drawable 的 shape xml 实现
- 自带控件: CardView 实现圆角
- 利用 View 的 ViewOutlineProvider 实现圆角
- Glide 等
1. 利用 Drawable 的 shape xml 实现
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="15dp"/>
<solid android:color="#FFFFFF"/>
<stroke android:width="1dp" android:color="#EBEBEB"/>
</shape>
比如如上的配置文件中: corners 属性就可以配置圆角
然后在我们需要的 View 上,设置它的 background 为该 drawable 即可.
2. CardView 的圆角
CardView 是自带圆角实现的,我们只需要在它的定义中加一句 app:cardCornerRadius=“8dp” 即可。
<androidx.cardview.widget.CardView
android:layout_width="256dp"
android:layout_height="128dp"
app:cardBackgroundColor="#0084FF"
app:cardCornerRadius="16dp" />
app:cardCornerRadius 关键属性 , 当然还可以设置阴影
3. 利用 View 的 ViewOutlineProvider 实现圆角, 比较少见:
这个实现比较像IOS那边的设计
itemView.outlineProvider = object : ViewOutlineProvider() {
override fun getOutline(view: View, outline: Outline) {
outline.setRoundRect(0, 0, view.width, view.height, 5.dp.toFloat())
}
}
// 打开开关
itemView.clipToOutline = true
outlineProvider 是View 的轮廓属性。
更大的好处是:比使用了第一种方式 drawable 的 xml 少了一层过度绘制。因为省去了设置的 background
同时 outline 还可以画其他的一些内容
outline.setRect(xxx)// 画矩形
outline.setRoundRect(xxx)// 画圆角矩形
outline.setOval(xxx) // 画椭圆
4. Glide 等图片库,通常自带了一些图片处理类
Glide.with(this).load("https://placehoder.com/100")
.apply(RequestOptions.bitmapTransform(RoundedCorners(20)))
.into(iv)