如何填充画布外的绘图

时间:2015-07-28 11:08:03

标签: android canvas draw paint

对于画布上的一些绘制线条,我想用颜色填充它。在我来的地方,我正在追随:

int height = getMeasuredHeight();
int width = getMeasuredWidth();
canvas.drawRect(0,0,width, height, mBackgroundPaint);
for(ArrayList<PointF> arc : drawings) {
    Iterator<PointF> iter = arc.iterator();
    Path tempPath = new Path();
    PointF p = iter.next();
    tempPath.moveTo(p.x, p.y);
    while (iter.hasNext()) {
        PointF l = iter.next();
        tempPath.quadTo(p.x, p.y, l.x, l.y);
        p = l;
    }
    tempPath.lineTo(p.x, p.y);
    canvas.drawPath(tempPath, paint);
}

在此代码中,正在绘制Arraylist中的一些自定义绘制。它由tempPath绘制。通过绘制填充矩形来填充背景颜色。这里的问题是如果绘制tempPath并用颜色transparent填充,则会显示背景颜色。我想从背景矩形中排除tempPath中的点。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我找到了实现目标的方法。这是代码:

int height = getMeasuredHeight();
int width = getMeasuredWidth();
Path backpath = new Path();
backpath.moveTo(0, 0);
backpath.lineTo(0, width);
backpath.lineTo(height, width);
backpath.lineTo(height, 0);
backpath.setFillType(Path.FillType.EVEN_ODD);
for(ArrayList<PointF> arc : drawings) {
    Iterator<PointF> iter = arc.iterator();
    Path tempPath = new Path();
    PointF p = iter.next();
    tempPath.moveTo(p.x, p.y);
    while (iter.hasNext()) {
        PointF l = iter.next();
        tempPath.quadTo(p.x, p.y, l.x, l.y);
        p = l;
    }
    tempPath.lineTo(p.x, p.y);
    backpath.addPath(tempPath);
    canvas.drawPath(path, mBackgroundPaint);
    canvas.drawPath(tempPath, paint);
}

Path.FillType.EVEN_ODD在这里工作。我用过两条路。第一个用于真实绘图,tempPath。第二个是绘制背景颜色backpath。绘制边界后,我已将tempPath的副本添加到backpath中。通过设置适当的绘画风格,我得到以下结果:

enter image description here