当前位置: 移动技术网 > IT编程>移动开发>Android > Android切圆角的几种常见方式总结

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

2020年03月09日  | 移动技术网IT编程  | 我要评论

胡萝卜的功效与作用,春莱爱,滕州一中电话

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 即可.

效果为:


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,

效果图如下:

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

实现效果为:

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 添加上圆角。

实现效果为:

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, 对轮廓进行剪切,高效且方便。

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网