gpt4 book ai didi

android - 在一条路径上绘制重叠区域

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:38:14 27 4
gpt4 key购买 nike

我有一个跨越自身的路径,我想改变跨越不止一次的区域的颜色。如下所示:

desired behavior

所以我设置了我的绘画。

    highlighterPaint = new Paint();
highlighterPaint.setAntiAlias(true);
strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20,
displayMetrics);
highlighterPaint.setStrokeWidth(strokeWidth);
highlighterPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
highlighterPaint.setAlpha(200);
highlighterPaint.setStyle(Paint.Style.STROKE);
highlighterPaint.setStrokeJoin(Paint.Join.ROUND);

但是当我调用 canvas.drawPath(mPath1, highlighterPaint)canvas.drawPath(mPath2, highlighterPaint) 时,我得到了下图。此图中有两条路径,其端点已标记。

actual behavior

我正在将每条路径绘制到 Canvas 上。

单独的 Path 正确地使它们的共享区域变暗,但单个 Path 不会。如何实现与第一张图片相似的效果?

最佳答案

Path 根本无法做到这一点。不要害怕,有更好的方法!

诀窍是将路径分成许多较小的部分并分别绘制每个部分。

在我的例子中,我从一系列点(通过触摸输入生成)创建了一条路径,并绘制了二次贝塞尔曲线来连接这些点。这是一个简要概述:

int numPoints = 0;
for (Point p : points) {
p1X = p2X;
p1Y = p2Y;
p2X = p3X;
p2Y = p3Y;
p3X = p.x;
p3Y = p.y;

numPoints++;
if (numPoints >= 3) {
startX = (p1X + p2X) / 2.0f;
startY = (p1Y + p2Y) / 2.0f;
controlX = p2X;
controlY = p2Y;
endX = (p2X + p3X) / 2.0f;
endY = (p2Y + p3Y) / 2.0f;
path.rewind();
path.moveTo(startX, startY);
path.quadTo(controlX, controlY, endX, endY);
canvas.drawPath(path, paint);
}
}

关于android - 在一条路径上绘制重叠区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26556411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com