2014-08-31 82 views
0

在我的应用程序中,我希望用户能够提供他们想要在Google Map中使用的latlng。所以,首先,我已经创建了一个活动有一个按钮,用户打开谷歌地图:标记在Google Maps API v2上不可拖动

private Button.OnClickListener opengmap = new Button.OnClickListener() { 
     public void onClick(View v) { 
     isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 
      Toast.makeText(v.getContext(), v.getContext().getString(R.string.T1001_NoGPSDetection), Toast.LENGTH_LONG).show();     
     } else { 
      strprovider = locationManager.getBestProvider(criteria, false); 
      location = locationManager.getLastKnownLocation(strprovider); 
     } 

     **gmap = new GM001MapForAddress(v.getContext(), location.getLatitude(), location.getLongitude(), R.id.map); 
     gmap.initialize();** 

     } 
    }; 

然后,我有这样的GM001MapForAddress初始化谷歌地图,打算有拖动的标记:

public class GM001MapForAddress { 
public Context context; 
public GoogleMap googleMap; 
public MarkerOptions markeroption; 
public Marker marker; 
public CameraUpdate center; 


public Double latitude, longitude; 
public Integer id; 
public Activity activity; 

public GM001MapForAddress(Context context, Double latitude, Double longitude, Integer id) { 
    this.context = context; 
    this.latitude = latitude; 
    this.longitude = longitude; 
    this.id = id; 
} 

public void initialize() { 

    activity = (Activity) context; 
    googleMap = ((MapFragment) activity.getFragmentManager().findFragmentById(id)).getMap(); 
    googleMap.setOnMapClickListener(clickmap); 
    googleMap.setOnMarkerDragListener(dragmarker); 
    //googleMap.setMyLocationEnabled(true); 
    LatLng latlng = new LatLng(latitude, longitude); 
    marker = googleMap.addMarker(new MarkerOptions().position(latlng).draggable(true)); 
    if (marker.isDraggable()) { 
     System.out.println("HAHA " + latlng); 
    } 
    marker.setDraggable(true); 
    googleMap.setOnMarkerDragListener(dragmarker); 
    center= CameraUpdateFactory.newLatLng(new LatLng(latitude, longitude)); 
    CameraUpdate zoom=CameraUpdateFactory.zoomTo(15); 
    googleMap.moveCamera(center); 
    googleMap.animateCamera(zoom); 
    googleMap.getFocusedBuilding(); 

} 

public OnMarkerDragListener dragmarker = new OnMarkerDragListener() { 

    @Override 
    public void onMarkerDrag(Marker marker) { 
     // TODO Auto-generated method stub 
     System.out.println("here1!!"); 

    } 

    @Override 
    public void onMarkerDragEnd(Marker arg0) { 
     // TODO Auto-generated method stub 
     System.out.println("here2!!"); 
     LatLng dragPosition = arg0.getPosition(); 
     double dragLat = dragPosition.latitude; 
     double dragLong = dragPosition.longitude; 
     System.out.println("halatlng: " + dragLat + " " + dragLong); 
     Log.i("info", "on drag end :" + dragLat + " dragLong :" + dragLong); 
     arg0.setPosition(dragPosition); 
     googleMap.addMarker(new MarkerOptions().position(dragPosition).draggable(true)); 

    } 

    @Override 
    public void onMarkerDragStart(Marker marker) { 
     // TODO Auto-generated method stub 
     System.out.println("here3!!"); 

    } 
}; 

public OnMapClickListener clickmap = new OnMapClickListener() { 

    @Override 
    public void onMapClick(LatLng point) { 
     // TODO Auto-generated method stub 
     googleMap.animateCamera(CameraUpdateFactory.newLatLng(point));   
     System.out.println("latdflng: " + point); 
    } 
}; 

我有我的clickmap侦听器工作,但dragmarker侦听器从不工作。整个周末我都在为此工作(我在亚洲)。所以,希望有人能够帮助我。

在此先感谢。

+0

你不能拖动标记,或者你只是不会在'dragmarker'中获得回调? – Simas 2014-08-31 06:12:56

+0

嗨,我不能拖动标记 – kwytse 2014-08-31 08:03:16

回答

9

要启用拖动模式,您需要长按一下标记,然后拖动。

如果标记很小,如果你有像我这样笨拙的手指,可能很难点击正确的点。

+0

忘了提及我在模拟器上测试,所以鼠标点击应该能够执行拖放操作。 – kwytse 2014-08-31 09:09:55

+1

@kwytse在模拟器上测试地图是个不错的主意。除此之外,你仍然需要用鼠标点击鼠标。一秒钟或两秒钟,不用移动鼠标即可开始拖动。 – Simas 2014-08-31 09:11:43

+0

你是对的。我多么愚蠢!非常感谢! – kwytse 2014-08-31 09:26:16

相关问题