使用9patch绘制GoogleMap路径

时间:2016-05-25 21:28:34

标签: android google-maps

我目前正在尝试在地图上绘制一个相当风格化的路径。

现有方法

public ArrayList<Polyline> renderNeonPolyline(Context context,
                                                           ArrayList<LatLng> routeCoordinates,
                                                           GoogleMap googleMap) {
    ArrayList<Polyline> polylines = new ArrayList<>();
    for (int i = 0; i < 6; i++) {
        PolylineOptions polylineOptions = new PolylineOptions();
        polylineOptions.width(48 - (i * 8));
        if (i == 0) {
            polylineOptions.color(ContextCompat.getColor(context, R.color.apple_25));
        } else if (i == 1) {
            polylineOptions.color(ContextCompat.getColor(context, R.color.apple_50));
        } else if (i == 2) {
            polylineOptions.color(ContextCompat.getColor(context, R.color.apple_75));
        } else if (i == 3) {
            polylineOptions.color(ContextCompat.getColor(context, R.color.apple));
        } else if (i == 4) {
            polylineOptions.color(ContextCompat.getColor(context, R.color.white_75));
        } else if (i == 5) {
            polylineOptions.color(ContextCompat.getColor(context, R.color.white));
        }
        polylineOptions.addAll(routeCoordinates);
        Polyline polyline = googleMap.addPolyline(polylineOptions);
        polylines.add(polyline);
    }

    return polylines;
}

所以这是有效的。它绘制了一条很好的线条,具有霓虹灯效果......大多数时候。出于某种原因,某些情况下只会渲染第一个apple_25行。 (我认为这与我们试图同时缩放和平移地图这一事实有关,但没有调查过它)此外,两端看起来非常粗糙。

我真正希望做的是用9patch图像画一条线。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:3)

这可能无法完全解决您的问题,但我认为这是一个很好的工作方式。

您可以使用richmaps(我是项目的所有者)使用基于位图的笔触着色器在地图上绘制折线:

RichPolylineOptions polylineOpts = new RichPolylineOptions(null)
        .zIndex(3)
        .strokeWidth(35)
        .add(new RichPoint(new LatLng(40.22987, -3.95931)))
        .add(new RichPoint(new LatLng(40.23109, -3.95926)))
        .add(new RichPoint(new LatLng(40.23063, -3.95837)))
        .add(new RichPoint(new LatLng(40.23169, -3.95809)))
        .add(new RichPoint(new LatLng(40.23093, -3.95705)))
        .add(new RichPoint(new LatLng(40.23023, -3.95626)))
        .strokeShader(new BitmapShader(
                BitmapFactory.decodeResource(getResources(), R.drawable.yourdrawable),
                Shader.TileMode.REPEAT,
                Shader.TileMode.REPEAT)); // Using a Bitmap as the stroke shader
RichPolyline polyline = polylineOpts.build();
polyline.add(new RichPoint(new LatLng(40.23163, -3.95602)).color(Color.CYAN)); // RichPoint added after the creation of the RichPolyline
richLayer.addShape(polyline);

mMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(40.23063, -3.95837), 18, 0, 0)));

结果如下:

enter image description here