csdn-mobile / RoundView

可以指定圆角的ViewGroup/View(可带边框)。A ViewGroup/View with rounded corners(and stroke).
63 stars 11 forks source link

RoundView

比较常用的ViewGroup和View的圆角实现,一发治好设计的圆角病。

效果预览

注意

特点

基本用法

Step 1. 添加mavenCentral仓库 在项目根目录下的 build.gradle 中添加仓库:

allprojects {
    repositories {
        ...
        mavenCentral()
    }
}

Step 2. 添加项目依赖

dependencies {
    implementation 'io.github.csdn-mobile:RoundView:1.8.0'
}

Step 3. 在布局文件中添加需要的RoundCorners

<net.csdn.roundview.CircleImageView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:src="https://github.com/csdn-mobile/RoundView/raw/master/@mipmap/ic_test"
    app:rStrokeColor="#FF3333"
    app:rStrokeWidth="5dp" />

<net.csdn.roundview.RoundImageView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:scaleType="centerCrop"
    android:src="https://github.com/csdn-mobile/RoundView/raw/master/@mipmap/ic_test"
    app:rRadius="30dp"/>

<net.csdn.roundview.RoundTextView
    android:layout_width="200dp"
    android:layout_height="100dp"
    android:background="@android:color/holo_blue_dark"
    android:gravity="center"
    android:text="Hello!"
    android:textColor="@android:color/white"
    android:textSize="40sp"
    app:rRightRadius="30dp" />

<net.csdn.roundview.RoundRelativeLayout
    android:layout_width="200dp"
    android:layout_height="200dp"
    app:rTopRightRadius="30dp"
    app:rBottomRightRadius="30dp"
    app:rStrokeColor="@android:color/holo_green_dark"
    app:rStrokeWidth="5dp">

    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_blue_dark" />
</net.csdn.roundview.RoundRelativeLayout>

<net.csdn.roundview.RoundTextView
    android:layout_width="200dp"
    android:layout_height="100dp"
    android:background="@android:color/holo_blue_dark"
    android:gravity="center"
    android:text="Hello!"
    android:textColor="@android:color/white"
    android:textSize="40sp"
    app:rLeftRadius="50dp"
    app:rRightRadius="50dp"/>
……

支持的属性、方法

属性名 含义 默认值 方法
rRadius 统一设置四个角的圆角半径 0dp setRadius(int radius)
rLeftRadius 左边两个角圆角半径 0dp setRadiusLeft(int radius)
rRightRadius 右边两个角圆角半径 0dp setRadiusRight(int radius)
rTopRadius 上边两个角圆角半径 0dp setRadiusTop(int radius)
rBottomRadius 下边两个角圆角半径 0dp setRadiusBottom(int radius)
rTopLeftRadius 左上角圆角半径 0dp setRadiusTopLeft(int radius)
rTopRightRadius 右上角圆角半径 0dp setRadiusTopRight(int radius)
rBottomLeftRadius 左下角圆角半径 0dp setRadiusBottomLeft(int radius)
rBottomRightRadius 右下角圆角半径 0dp setRadiusBottomRight(int radius)
rStrokeWidth 边框宽度 0dp setStrokeWidth(int width)
rStrokeColor 边框颜色 @color/white or #FFFFFF setStrokeColor(int color)

原理浅解

Android View的绘制流程。 View的绘制看一下这篇文章即可,代码版本比较早,但是逻辑基本相同。

  1. 使用Path的addRoundRect方法,将需要剪切的圆角半径进行设置。
  2. 所有View和ViewGroup的绘制都需要经过draw方法,在draw结束之后使用第一步的Path和PorterDuffXfermode来设置颜色混合模式,将圆形外部进行背景颜色混合。
  3. 注意在draw中减少创建对象次数。

版本记录

版本号 更新内容
1.7.1 修复BUG
1.4.0 兼容嵌套播放器显示错误问题
1.3.0 修复嵌套圆角展示错误问题
1.2.0 修复8.0以下圆角错误问题
1.1.0 边框颜色支持selector
1.0.0 First Version