我在 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()
,但这似乎不对。
我需要自定义路径效果的原因 - 是我需要围绕实际道路绘制路线 - 所以路线内部应该是空的并且有内部和外部笔划线。
如果有人知道如何以其他方式制作这种路径效果 - 请告诉我,因为这个解决方案有很大的缺点,我必须处理..
最佳答案
除非您遇到这里提到的问题 http://code.google.com/p/android/issues/detail?id=24873,否则我看不出有任何理由不能正常工作。 .
关于android - 自定义 PathEffect 的描边帽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11751382/