对于画布上的一些绘制线条,我想用颜色填充它。在我来的地方,我正在追随:
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
中的点。
感谢您的帮助
答案 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
中。通过设置适当的绘画风格,我得到以下结果: