我在画布上画了一个黑色的圆圈,并将画布的背景色设置为红色。
我只想让黑色的圆圈出现在我的视野中,但我也得到了红色。
我试过用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之后绘制背景
你不会看到任何红色,因为你在它的后面画满了整个路径,如果我猜对了-你想用一种颜色画出一个圆的一部分,用另一种颜色画其余的一部分-如果你要剪辑的路径是整个圆,而你画的路径是你想画的部分

07-27 14:07