繁体   English   中英

即使在禁用harware加速后,canvas.clipPath()也无法正常工作

[英]canvas.clipPath() not working even after disabling harware acceleration

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

我只想看到黑色的圆圈作为我的视图,但我也得到了红色。

我尝试使用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();
}

这不是剪辑路径的用途。 当您绘制路径然后剪切它时 - 这意味着您将从该点在画布上绘制的其他东西将被路径遮盖。 在你的情况下,你在剪切画布之前绘制一个红色背景 - 所以它遍布画布,然后你剪切它但只在路径内绘制,所以裁剪是无用的。

您可以在该代码中获得所需内容:

// 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之后绘制背景

你不会看到任何红色,因为你画在它后面的所有路径上,如果我猜对了 - 你希望能够用一种颜色绘制一个圆的一部分,而其他颜色的其余部分 - 你可以实现它您将剪辑的路径将是整个圆圈,您绘制的路径将是您要绘制的部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM