我可以使用setClipBounds剪辑带圆圈的视图吗?

时间:2015-11-24 11:52:29

标签: android

我有以下代码来划分要绘制的视图的区域:

Rect rect = new Rect();
rect.set(0, 0, 100, 100);
View.setClipBounds(rect);

这将仅在指定的矩形(或在本例中为正方形)上绘制我的视图。但是,我希望将视图剪切为圆形。有没有办法以某种方式绕过Rect对象的角落?

3 个答案:

答案 0 :(得分:5)

在这种情况下,您可以继承该视图并为其添加一些额外的逻辑。

将这些代码添加到其构造函数方法中,或者您希望初始化视图的位置。

final Path path = new Path();
path.addRoundRect(new RectF(0,0,getWidth(),getHeight()),10,10,Direction.CW);

使用这些代码,您可以定义绘制视图的路径(修补程序边界内的区域)。

将此方法添加到类中以在视图上应用此蒙版。

@Override
protected void dispatchDraw(Canvas canvas){
    canvas.clipPath(path);
    super.dispatchDraw(canvas);
}

致谢:https://stackoverflow.com/a/7559233/1841194

答案 1 :(得分:1)

尝试使用

RectF r = new RectF(10,100,200,400);
canvas.drawRoundRect(r, 0, 0, mPaint);

about 或它的方形情况。

另一种方法是使用剪贴蒙版。这个想法的概念是使用PorterDuffXfermodePorterDuffThis is圆角视图的示例。我不知道你想要什么,这就是为什么我只能给我用过的基本方法。 The other example

答案 2 :(得分:0)

尝试一下:

val circlePath = Path().apply {
        addCircle(x, y, radius, Path.Direction.CW)
    }
canvas.clipPath(circlePath)