我在MapView上实现了路由的自定义路径效果,并提出了如何使路径四舍五入的开始和结束的问题(如Paint.setStrokeCap(Cap.ROUND)
)。见截图 - 黑线 - 是我的路我要舍末自定义PathEffect的笔画上限
这里是我如何实现我的自定义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()
到我的路径的结尾(和开始),但这看起来不正确。
我需要自定义路径效果的原因是我需要在实际道路上绘制路线 - 因此路线应该是空的,并且具有内部和外部的线条。
如果有人知道如何使这种路径效应在一些其他的方式 - 请让我知道,因为这种解决方案具有很大的缺点我不得不面对..
我指定自定义路径线,让Android不知道,在盖子应该是什么,应该如何看起来像我的自定义路径线。那就是为什么我认为中风帽不起作用。 – 2012-08-01 04:29:35