11

Chcę dodać znacznik na mapie za pomocą długiego kliknięcia. ale to nie działa. działa normalne kliknięcie. Toast w onMapClick() wyświetlany jest przy normalnym naciśnięciu. ale długie kliknięcie nie działa. Toast w onMapLongClick() nie wyświetla się z długim kliknięciem. Znacznik również nie jest wyświetlany na mapie.Google Maps Android API v2 wykrywa długie kliknięcie na mapie i dodaje znacznik nie działa

Używam aplikacji SupportMapFragment, ponieważ chcę używać mojej aplikacji na urządzeniach z Androidem 2.x. Przetestowałem swoją aplikację na Nexusie, który ma wersję Androida 2.3.7.

To jest mój kod.

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(); 

    } 

} 

Jak mogę to rozwiązać?

Odpowiedz

36

Użyłem tego. Zadziałało.

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

Nie masz ustawionej ikony. Spróbuj:

@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); 
     } 
    }); 

LUB

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); 
     } 
    });