我在画布上画了一个黑色的圆圈,我将画布的背景颜色设置为红色。
我只想看到黑色的圆圈作为我的视图,但我也得到了红色。
我尝试使用canvas.clipPath()来进行工作。我在网上搜索,发现我们需要禁用硬件加速才能使其正常工作。我试过了,但它仍然有效。
尝试禁用特定视图的硬件加速:
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
还有整个申请:
android:hardwareAccelerated="false"
两种情况下的Dint工作。 关于如何使其发挥作用的任何想法?
代码:
在这里我正在剪辑
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.canvas = canvas;
path.reset();
left = 50;
top = 50;
right = getWidth()- 50;
bottom = getHeight()-50;
RectF rectf = new RectF(left, top, right, bottom);
path.arcTo(rectf, startAngle, sweepAngle);
path.lineTo(linex, liney);
canvas.clipPath(path);
canvas.drawPath(path, paint);
//canvas.restore();
}
答案 0 :(得分:5)
这不是剪辑路径的用途。当您绘制路径然后剪切它时 - 这意味着您将从该点在画布上绘制的其他东西将被路径遮盖。 在你的情况下,你在裁剪画布之前绘制一个红色背景 - 所以它遍布画布,然后你剪裁它但只在路径内绘制,所以裁剪是没用的。
您可以在该代码中获得所需内容:
// Do not set any background to the view before
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.canvas = canvas;
path.reset();
left = 50;
top = 50;
right = getWidth()- 50;
bottom = getHeight()-50;
RectF rectf = new RectF(left, top, right, bottom);
path.arcTo(rectf, startAngle, sweepAngle);
path.lineTo(linex, liney);
canvas.clipPath(path);
canvas.drawRect(0, 0, getWidth(), getHeight(), Red Paint in here);
canvas.drawPath(path, paint);
//canvas.restore();
}
这样你就可以在pathClip
之后绘制背景你不会看到任何红色,因为你画在它后面的所有路径上,如果我猜对了 - 你希望能够用一种颜色绘制一个圆的一部分,而其他颜色则是其他的 - 你可以如果您要剪辑的路径将是整圆,并且您绘制的路径将是您要绘制的部分,则实现它