我目前正在尝试在地图上绘制一个相当风格化的路径。
现有方法
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图像画一条线。
有什么想法吗?
由于
答案 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)));
结果如下: