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()
、最後まで(そして最初まで)考えていましたが、これは正しくないようです。
カスタムパス効果が必要な理由は、実際の道路の周りにルートを描画する必要があるためです。そのため、ルートは内側が空で、内側と外側のストロークラインが必要です。
誰かがこの種のパス効果を他の方法で作成する方法を知っている場合-このソリューションには私が対処しなければならない大きな短所があるので、私に知らせてください。