11

Tôi muốn thêm điểm đánh dấu trên bản đồ với nhấp chuột dài. nhưng nó không hoạt động. nhấp chuột bình thường đang hoạt động. Toast trong onMapClick() được hiển thị với nhấn bình thường. nhưng nhấp chuột dài không hoạt động. Toast trong onMapLongClick() không được hiển thị với nhấp chuột dài. cũng đánh dấu không được hiển thị trên bản đồ.Google Maps API Android v2 phát hiện nhấp chuột dài trên bản đồ và thêm điểm đánh dấu không hoạt động

Tôi đang sử dụng SupportMapFragment vì tôi muốn sử dụng ứng dụng của mình trên các thiết bị Android 2.x. Tôi đã thử nghiệm ứng dụng của mình trên ứng dụng nexus có phiên bản Android 2.3.7.

Đây là mã của tôi.

public class MainActivity extends FragmentActivity implements 
     OnMapClickListener, OnMapLongClickListener { 

    final int RQS_GooglePlayServices = 1; 
    private GoogleMap myMap; 

    Location myLocation; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     FragmentManager myFragmentManager = getSupportFragmentManager(); 
     SupportMapFragment mySupportMapFragment = (SupportMapFragment) myFragmentManager 
       .findFragmentById(R.id.map); 
     myMap = mySupportMapFragment.getMap(); 

     myMap.setMyLocationEnabled(true); 

     myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
     // myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     // myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
     // myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 

     myMap.setOnMapClickListener(this); 
     myMap.setOnMapLongClickListener(this); 

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     int resultCode = GooglePlayServicesUtil 
       .isGooglePlayServicesAvailable(getApplicationContext()); 

     if (resultCode == ConnectionResult.SUCCESS) { 
      Toast.makeText(getApplicationContext(), 
        "isGooglePlayServicesAvailable SUCCESS", Toast.LENGTH_LONG) 
        .show(); 
     } else { 
      GooglePlayServicesUtil.getErrorDialog(resultCode, this, 
        RQS_GooglePlayServices); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public void onMapClick(LatLng point) { 

     myMap.animateCamera(CameraUpdateFactory.newLatLng(point)); 

     Toast.makeText(getApplicationContext(), point.toString(), 
       Toast.LENGTH_LONG).show(); 


    } 

    @Override 
    public void onMapLongClick(LatLng point) { 

     myMap.addMarker(new MarkerOptions().position(point).title(
       point.toString())); 

     Toast.makeText(getApplicationContext(), 
       "New marker [email protected]" + point.toString(), Toast.LENGTH_LONG) 
       .show(); 

    } 

} 

Làm cách nào tôi có thể giải quyết vấn đề này?

Trả lời

36

Tôi đã sử dụng tính năng này. Nó đã làm việc.

GoogleMap gm; 

gm.setOnMapLongClickListener(this); 

@Override  
public void onMapLongClick(LatLng point) { 
    gm.addMarker(new MarkerOptions() 
     .position(point) 
     .title("You are here")   
     .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 
} 
1

Bạn không có biểu tượng nào được giải quyết. Hãy thử:

@Override 
    public void onMapLongClick(LatLng point) { 

     myMap.addMarker(new MarkerOptions() 
      .position(point) 
      .title(point.toString()) 
      .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 

     Toast.makeText(getApplicationContext(), 
      "New marker [email protected]" + point.toString(), Toast.LENGTH_LONG) 
      .show(); 

} 
1
googleMap = supportMapFragment.getMap(); 

    // Setting a click event handler for the map 
    googleMap.setOnMapClickListener(new OnMapClickListener() { 

     @Override 
     public void onMapClick(LatLng latLng) { 

      // Creating a marker 
      MarkerOptions markerOptions = new MarkerOptions(); 

      // Setting the position for the marker 
      markerOptions.position(latLng); 

      // Setting the title for the marker. 
      // This will be displayed on taping the marker 
      markerOptions.title(latLng.latitude + " : " + latLng.longitude); 

      // Clears the previously touched position 
      googleMap.clear(); 

      // Animating to the touched position 
      googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 

      // Placing a marker on the touched position 
      googleMap.addMarker(markerOptions); 
     } 
    }); 

HOẶC

mMap.setOnMapLongClickListener(new 
      GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick (LatLng latLng){ 
      Geocoder geocoder = 
       new Geocoder(MapMarkerActivity.this); 
      List<Address> list; 
      try { 
       list = geocoder.getFromLocation(latLng.latitude, 
       latLng.longitude, 1); 
      } catch (IOException e) { 
       return; 
      } 
      Address address = list.get(0); 
      if (marker != null) { 
       marker.remove(); 
      } 

      MarkerOptions options = new MarkerOptions() 
       .title(address.getLocality()) 
       .position(new LatLng(latLng.latitude, 
       latLng.longitude)); 

      marker = mMap.addMarker(options); 
     } 
    });