拖动Polyline onMarkerDrag Android Google Maps v2

时间:2014-01-25 14:26:16

标签: android google-maps-markers google-maps-android-api-2 google-maps-api-2

我目前正在开发一个Android应用程序,允许用户在地图上绘制带有标记的折线。现在,我想实现一个功能,即无论何时拖动标记,折线都可以拖动,并在调用onMarkerDragEnd()方法时更新折线。有谁知道我怎么能做到这一点?以下是我的代码片段。谢谢!

googleMap.setOnMapClickListener(new OnMapClickListener(){

        @Override
        public void onMapClick(LatLng point) {
            // TODO Auto-generated method stub
        if(drawMode == true && arrayPoints.isEmpty()){

            MarkerOptions marker=new MarkerOptions();
            marker.position(point); 
            googleMap.addMarker(marker).setDraggable(true); 
            arrayPoints.add(point);
            marker.draggable(true);


        }
        else if(drawMode == true){
            Log.e("","IN SECOND");
            MarkerOptions marker=new MarkerOptions();
            marker.position(point); 
            googleMap.addMarker(marker).setDraggable(true); 
            arrayPoints.add(point); 
            PolylineOptions polylineOptions = new PolylineOptions(); 
            polylineOptions.color(Color.BLUE); 
            polylineOptions.width(5);  
            polylineOptions.addAll(arrayPoints); 
            Polyline drawRoute = googleMap.addPolyline(polylineOptions);
        }
        }

    });

1 个答案:

答案 0 :(得分:1)

首先使Polyline drawRoute成为一个字段而不是局部变量。 然后你可以通过调用drawRoute.setPoints(arrayPoints)来更新onMarkerDragEnd里面的折线。

然后你还需要一个Java-Map,它可以跟踪哪个标记负责数组中的哪个点。映射将使用marker-ID作为键,将array-index作为值。 (您从map.addMarker返回的标记中获取标记ID) 拖动标记时,您可以使用marker-ID和Java-Map查找arrayPoints中相应Point的索引。这样,您可以在数组中交换点并再次调用drawRoute.setPoints。