我有以下代码来划分要绘制的视图的区域:
Rect rect = new Rect();
rect.set(0, 0, 100, 100);
View.setClipBounds(rect);
这将仅在指定的矩形(或在本例中为正方形)上绘制我的视图。但是,我希望将视图剪切为圆形。有没有办法以某种方式绕过Rect对象的角落?
答案 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);
}
答案 1 :(得分:1)
尝试使用
RectF r = new RectF(10,100,200,400);
canvas.drawRoundRect(r, 0, 0, mPaint);
about 或它的方形情况。
另一种方法是使用剪贴蒙版。这个想法的概念是使用PorterDuffXfermode
或PorterDuff
。
This is圆角视图的示例。我不知道你想要什么,这就是为什么我只能给我用过的基本方法。 The other example
答案 2 :(得分:0)
尝试一下:
val circlePath = Path().apply {
addCircle(x, y, radius, Path.Direction.CW)
}
canvas.clipPath(circlePath)