我正在为 MapView 顶部的路线实现自定义路径效果,我想出了如何使路径的开始和结束变得圆滑的问题(就像这样Paint.setStrokeCap(Cap.ROUND)
做)。看截图 - 黑线 - 是我想在最后绕行的路线
以下是我实现自定义 PathEffect 的方式:
public RouteOverlay(Context context)
{
mContext = context;
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(COLOR_DEFAULT);
mPaint.setAntiAlias(true);
mPaint.setStrokeCap(Cap.ROUND); // this one does not work...
mPaint.setStrokeJoin(Join.ROUND);
PathEffect e1 = new PathDashPathEffect(createRouteLineStyle(), 10, 3, PathDashPathEffect.Style.MORPH);
PathEffect e2 = new CornerPathEffect(10);
mPaint.setPathEffect(new ComposePathEffect(e1, e2));
}
private Path createRouteLineStyle()
{
Path p = new Path();
p.moveTo(-5, ROUTE_LINE_WIDTH/2);
p.lineTo(5,ROUTE_LINE_WIDTH/2);
p.lineTo(5,ROUTE_LINE_WIDTH/2-currentThickness);
p.lineTo(-5, ROUTE_LINE_WIDTH/2-currentThickness);
p.close();
p.moveTo(-5, -(ROUTE_LINE_WIDTH/2));
p.lineTo(5,-(ROUTE_LINE_WIDTH/2));
p.lineTo(5, -(ROUTE_LINE_WIDTH/2-currentThickness));
p.lineTo(-5, -(ROUTE_LINE_WIDTH/2-currentThickness));
return p;
}
@Override
public void draw(Canvas canvas, final MapView mapView, boolean shadow)
{
if(shadow) return;
if(mDrawEnabled)
{
synchronized(mPoints)
{
canvas.drawPath(mPath, mPaint);
}
}
}
正如您在屏幕截图中看到的那样,该行的结尾不是四舍五入的(以及开头......)。setStrokeCap(Cap.ROUND)
没有帮助。
所以问题是 - 如何在我的自定义路径中添加圆帽?我正在考虑使用addArc()
或addCircle()
结束我的路径(和开始),但这似乎不正确。
我需要自定义路径效果的原因 - 是我需要围绕实际道路绘制路线 - 所以路线内部应该是空的并且有内部和外部笔划线。
如果有人知道如何以其他方式制作这种路径效果 - 请告诉我,因为这个解决方案有很大的缺点我必须处理..