欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android切圆角的几种常见方式总结

程序员文章站 2022-04-20 13:34:10
android 中有哪些可以切圆角的实现方式呢? 本文总结一下常用的方式。 以下内容分为以下几部分: 利用 drawable 的 shape xml 实现 ca...

android 中有哪些可以切圆角的实现方式呢?

本文总结一下常用的方式。

以下内容分为以下几部分:

  1. 利用 drawable 的 shape xml 实现
  2. cardview 实现圆角
  3. fresco 中的 simpledraweeview 实现圆角
  4. 利用 view 的 viewoutlineprovider 实现圆角
  5. 总结

1. 利用 drawable 的 shape xml 实现

很多时候,我们可以自定义一些 drawable , 代码如下:

<?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 就是我们实现的圆角,这里指定圆角的半径为 15dp。

solid 是指填充色,这里为白色;

stroke 为drawable 的边缘宽度和颜色设置,这里为 1dp 颜色比白色黑一点。

如果知识想要 「圆角」的话,可以不需要指定 stroke

然后在我们需要的 view 上,设置它的 background 为该 drawable 即可.

效果为:

Android切圆角的几种常见方式总结
drawable 圆角

本质是在 background 上加了圆角。

2. cardview 的圆角

cardview 是自带圆角实现的,我们只需要在它的定义中加一句 app:cardcornerradius="8dp" 即可。

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.constraintlayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <androidx.cardview.widget.cardview
 android:layout_width="256dp"
 android:layout_height="128dp"
 app:cardbackgroundcolor="#0084ff"
 app:cardcornerradius="16dp"
 app:layout_constraintbottom_tobottomof="parent"
 app:layout_constraintend_toendof="parent"
 app:layout_constraintstart_tostartof="parent"
 app:layout_constrainttop_totopof="parent" />

</androidx.constraintlayout.widget.constraintlayout>

设置该 cardview 圆角半径为 16dp,

效果图如下:

Android切圆角的几种常见方式总结

cardview 圆角

3. fresco 中的 simpledraweeview

fresco 是一个强大的图片库,里面的 simpledraweeview 常用来加载图片。

simpledraweeview 实现了很多功能,其中一个就是实现了圆角属性 roundedcornerradius

实现代码:

 <com.facebook.drawee.view.simpledraweeview
 android:layout_width="256dp"
 android:layout_height="128dp"
 app:layout_constraintbottom_tobottomof="parent"
 app:layout_constraintend_toendof="parent"
 app:layout_constraintstart_tostartof="parent"
 app:layout_constrainttop_totopof="parent"
 app:actualimagescaletype="centercrop"
 app:roundedcornerradius="3dp" />

这里设置图片圆形边角为 3dp

实现效果为:

Android切圆角的几种常见方式总结

simpledraweeview 圆角

4. 利用 view 的 viewoutlineprovider 实现圆角

这种实现方式,本质上是修改了 view 的轮廓。

代码实现:

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

为整个 view 添加上圆角。

实现效果为:

Android切圆角的几种常见方式总结

outlineprovider 圆角

这样的好处是,不需要给里面的子 view 设置圆角,在最外层的 view 设置为圆角即可。

更大的好处是:比使用了第一种方式 drawable 的 xml 少了一层过度绘制。因为省去了设置的 background

利用 viewoutlineprovider 的实现圆角,本质上是在 view 的画布上画了一个圆角的矩形。

setroundrect(xxx)

同时 outline 还可以画其他的一些内容。

outline.setrect(xxx)// 画矩形
outline.setroundrect(xxx)// 画圆角矩形
outline.setoval(xxx) // 画椭圆

同时,因为 outline.setroundrect(0, 0, view.width, view.height, 5.dp.tofloat()) 是在一个矩形上画的圆角。因为,当我们的矩形减小或增大时,有些圆角是没有区域可画,会形成部分圆角存在的情况。

既然提到了 viewoutlineprovider , 那就得提一下 statelistanimator 这个动画得效果, 感兴趣得自己去搜索一下。可参考 statelistanimator

5.总结

上面总结了一下常见的 android 中实现圆角的方式,在使用过程中,怎么方便怎么来。

我个人最近比较喜欢用 viewoutlineprovider, 对轮廓进行剪切,高效且方便。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。