Canvas.clipPath(路径)不按预期裁剪

我正在试图将画布绘制操作剪裁成弧形的楔形。 但是,将裁剪路径设置为画布后,我没有得到预期的结果。

为了说明,这里是我正在做的事情:

在这里输入图像描述

path.reset();

//Move to point #1
path.moveTo(rect.centerX(), rect.centerY());

//Per the documentation, this will draw a connecting line from the current
//position to the starting position of the arc (at 0 degrees), add the arc
//and my current position now lies at #2.
path.arcTo(rect, 0, -30);

//This should then close the path, finishing back at the center point (#3)
path.close();

这是有效的,当我简单地绘制这条路径( canvas.drawPath(path, paint) )时,它将绘制如上所示的楔形。 但是,当我将此路径设置为画布的剪切路径并将其绘制时:

//I've tried it with and without the Region.Op parameter
canvas.clipPath(path, Region.Op.REPLACE);
canvas.drawColor(Color.BLUE);

我得到下面的结果,而不是(楔只是为了显示参考):

在这里输入图像描述

因此,它似乎剪辑到Path的边界矩形,而不是Path本身。 任何想法发生了什么?

编辑就像更新一样,我发现了一个更有效的方式来实现硬件加速。 首先,将整个图像(您将要裁剪的)绘制到离屏位图中。 使用此Bitmap制作BitmapShader ,将该着色器设置为Paint ,然后使用该Paint对象绘制楔形路径:

drawMyBitmap(bitmap);
Shader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setShader(shader);

@Override
public void onDraw(Canvas canvas) {
    canvas.drawArc(rect,         //The rectangle bounding the circle
                   startAngle,   //The angle (CW from 3 o'clock) to start
                   sweepAngle,   //The angle (CW from 3 o'clock) of the arc
                   true,         //Boolean of whether to draw a filled arc (wedge)
                   paint         //The paint with the shader attached
    );
}

您是否使用HC或更高版本或者使用硬件加速?

如果是这样,clipPath不受支持并且存在问题。

developer.android.com/guide/topics/graphics/hardware-accel.html。


OP的问题是关于使用剪辑区域的具体问题,并已由@Simon回答。 但请记住,绘制填充弧线有一种更直接的方式:

创建一个Paint

mPaint = new Paint();
mPaint.setColor(Color.BLUE);
mPaint.setStyle(Style.FILL);
mPaint.setAntiAlias(true);

绘图时,只需绘制路径:

canvas.drawPath(path, mPaint);
链接地址: http://www.djcxy.com/p/79075.html

上一篇: Canvas.clipPath(Path) not clipping as expected

下一篇: Performance of postgres is very slow