Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android canvas.clipPath()即使在禁用硬件加速后也不工作_Android_Android Canvas - Fatal编程技术网

Android canvas.clipPath()即使在禁用硬件加速后也不工作

Android canvas.clipPath()即使在禁用硬件加速后也不工作,android,android-canvas,Android,Android Canvas,我在画布上画了一个充满黑色的圆圈,并将画布的背景色设置为红色 我只希望黑色的圆圈显示为我的视图,但我也得到红色 我试过使用canvas.clipPath()它不起作用。我搜索了一下网络,发现我们需要禁用硬件加速才能让它工作。我试过了,但还是不行 已尝试为特定视图禁用硬件加速: view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 以及整个应用程序: android:hardwareAccelerated="false" 力在两种情况下都起作用。

我在画布上画了一个充满黑色的圆圈,并将画布的背景色设置为红色

我只希望黑色的圆圈显示为我的视图,但我也得到红色

我试过使用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之后绘制背景


你将看不到任何红色,因为你在它后面画满了路径,如果我猜对了-您希望能够以一种颜色绘制圆的一部分,其他颜色绘制圆的一部分-如果您要剪裁的路径是完整的圆,并且您绘制的路径是您要绘制的部分,则您可以实现这一点

请提供您使用clipPath@NirHartmann我已将代码添加到问题好的,我再解释一下。我想你误解了我的问题。在上图中,我在画布上画了一个圆圈。圆圈用黑色填充,其余区域用红色填充(红色-画布中的空白)。我将在我的活动中添加多个圆圈。我不想在我的活动中出现额外的空间我将用color.TRANSPARENT替换额外的红色(color.red)-只是为了显示生成的额外空间我已经放置了红色我希望你现在理解我的问题了?所以基本上我只想从画布上剪下黑色圆圈并删除这些额外的空间(即用红色删除整个区域)额外的间距是添加到左侧和顶部的50像素