1

Я хочу, чтобы иметь возможность щелкнуть синюю точку (мое местоположение), которая отображается на карте. Есть ли способ получить обратный вызов из этого клика?Карты V2 myLocation синяя точка callback

Спасибо, Мартейн

ответ

2

Одним из возможных обходной путь может быть рисую Marker (с подобным значком) на верхней части My Location точки, так что вы можете получить соответствующий onMarkerClick() обратного вызова. Это также потребовало бы удаления маркера и добавления его в новое место каждый раз, когда есть событие обновления местоположения, которое вы можете прослушать, выполнив OnMyLocationChangeListener.

EDIT: интерфейс OnMyLocationChangeListener теперь не рекомендуется, следует использовать вместо нового LocationClient и связанного с ним LocationListener.

Так соответствующий код может выглядеть примерно так (я на самом деле не проверял это):

public class DemoMapFragment extends SupportMapFragment implements OnMyLocationChangeListener, OnMarkerClickListener { 

    // Note that 'mMap' may be null if the Google Play services APK is not available. 
    private GoogleMap mMap; 
    private Marker myLocationMarker; 
    private static BitmapDescriptor markerIconBitmapDescriptor; 
    /* ... */ 

    @Override 
    public void onResume() { 
     super.onResume(); 
     setUpMapIfNeeded(); // Get a reference to the map  
     mMap.setMyLocationEnabled(true); // Enable the my-location layer 
     mMap.setOnMyLocationChangeListener(this); 
     mMap.setOnMarkerClickListener(this); 
    } 

    private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the map. 
     if (mMap == null) { 
      mMap = getMap(); 
      // Check if we were successful in obtaining the map. 
      if (mMap != null) { 
       // The Map is verified. It is now safe to manipulate the map: 

       // Load custom marker icon 
       markerIconBitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.my_location_dot_icon); 

       // When the map is first loaded we need to add our marker on top of My Location dot 
       myLocationMarker = mMap.addMarker(new MarkerOptions() 
         .position(new LatLng(mMap.getMyLocation().getLatitude(),mMap.getMyLocation().getLongitude())) 
         .icon(markerIconBitmapDescriptor)); 

       // Set default zoom 
       mMap.moveCamera(CameraUpdateFactory.zoomTo(15f)); 
      } 
     } 
    } 

    @Override 
    public void onMyLocationChange(Location location) { 
     // Remove the old marker object 
     myLocationMarker.remove(); 

     // Add a new marker object at the new (My Location dot) location 
     myLocationMarker = mMap.addMarker(new MarkerOptions() 
       .position(new LatLng(location().getLatitude(),location().getLongitude())) 
       .icon(markerIconBitmapDescriptor)); 
    } 

    @Override 
    public boolean onMarkerClick(Marker marker) { 
     if (marker.equals(myLocationMarker)) { 
      /* My Location dot callback ... */ 
     } 
    } 
} 
+0

Благодарим за Ваш ответ. Думаю, это хорошая работа, и я ее реализовал. Я просто не понимаю, почему api не предоставляет этого, кто не хочет нажимать myLocation ?! Также я понимаю, что V1 api предоставил его (я никогда не использовал карты V1, хотя). – Tinus81

+0

@ Tinus81 Рад, что это работает для вас. Я предполагаю, что эта функция будет добавлена ​​в будущем [release] (https://developers.google.com/maps/documentation/android/releases). – Nevermore

+2

Кстати, я сделал для этого маркер, который полностью прозрачен. Пользователь не заметит разницы с приложением «Карты»! – Tinus81