GDa*_*ger 6 android porter-duff android-canvas
我有一个Path跨越自己的东西,我想改变不止一次经过的区域的颜色.如下所示:

所以我设置了我的油漆.
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);
Run Code Online (Sandbox Code Playgroud)
但是,当我打电话给我时canvas.drawPath(mPath1, highlighterPaint),canvas.drawPath(mPath2, highlighterPaint)我得到了下面的图像.此图片中有两个路径,其端点标记为.

我正在绘制每条路径Canvas.
单独的Paths正确地使它们的共享区域变暗,但是单个区域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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |