我在画布上画了一个黑色的圆圈,并将画布的背景色设置为红色。
我只想让黑色的圆圈出现在我的视野中,但我也得到了红色。
我试过用canvas.clippath()它没用。我搜索了一下网络,发现我们需要禁用硬件加速才能让它工作。我试过了,但还是没用。
已尝试为特定视图禁用硬件加速:
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
以及整个应用:
android:hardwareAccelerated="false"
两种情况下都有效。
有什么办法让它起作用吗?
代码:
我在这里剪辑
@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();
}
最佳答案
这不是剪辑路径的用途。当你画一条路径,然后剪辑它-这意味着其余的东西,你将画在画布上从那一点将被路径掩盖。
在你的例子中,你在剪辑画布之前画一个红色的背景-所以它覆盖了整个画布,然后你剪辑它,但只在路径内绘制,所以剪辑是无用的。
你可以在代码中得到你需要的:
// 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之后绘制背景
你不会看到任何红色,因为你在它的后面画满了整个路径,如果我猜对了-你想用一种颜色画出一个圆的一部分,用另一种颜色画其余的一部分-如果你要剪辑的路径是整个圆,而你画的路径是你想画的部分