2016-05-25 37 views
4

我目前正试图在地图上绘制相当程式化的路径。使用9patch绘制GoogleMap路径

方法,因为它代表

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图像画一条线。

任何想法?

感谢

回答

3

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

您可以使用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

+0

这可以工作!我今天下午试一试。谢谢 – Kraiden

+0

@antonio我试过了你的库,但是它根本没有绘制任何折线或多边形。是否有某种像start()或draw()方法的触发器? – portfoliobuilder

+1

@portfoliobuilder您需要在'onCameraChange'方法(或onCameraIdle方法)上调用'richLayer.refresh();' – antonio