2016-05-25 63 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