android - 自定义 PathEffect 的描边帽

标签 android android-canvas paint

我在 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(),但这似乎不对。

我需要自定义路径效果的原因 - 是我需要围绕实际道路绘制路线 - 所以路线内部应该是空的并且有内部和外部笔划线。

如果有人知道如何以其他方式制作这种路径效果 - 请告诉我,因为这个解决方案有很大的缺点,我必须处理..

No stroke cap

最佳答案

除非您遇到这里提到的问题 http://code.google.com/p/android/issues/detail?id=24873,否则我看不出有任何理由不能正常工作。 .

关于android - 自定义 PathEffect 的描边帽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11751382/

相关文章:

安卓测试: Multiple dex files define Lorg/hamcrest/Description;

java - 因为我无法在动态大小的 Canvas 下方添加 xml 布局

delphi - 菜单翻转闪烁 - 如何解释鼠标离开事件

java - 制作绘画程序时遇到的问题

android - 关于 FragmentTransaction

android - Android:在全屏播放YouTube视频时,系统会重新加载

未找到 Android NDK 和 JNI native 方法

android paint 使用位图作为绘画对象

android - 在android的SurfaceView上渲染字节数组

Android:在不同的屏幕密度上绘制相同尺寸的直线或圆圈