Получить координаты на нажав карту в android

Я пытаюсь сделать что-то вроде этого: у меня mapactivity и когда пользователь нажимает на карте он показывает координаты этого места. Я уже переопределил метод onclick, но он даже не вызывается. Есть Идеи?

public class MapPoint extends MapActivity implements OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.mappoints);

    MapView map = (MapView)findViewById(R.id.mapview);
    map.setOnClickListener(this);
    map.setBuiltInZoomControls(true);
    map.getController().setZoom(18);
    map.getController().setCenter(new GeoPoint(39735007, -8827330));


}

@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

public void onClick(View arg0) {
        Toast.makeText(this, "text", Toast.LENGTH_SHORT);
}

}

6 ответов


попробуйте следующее.

создать класс, производный от оверлея класс и переопределить onTap () метод. Затем вы можете добавить свой оверлей в свой MapView. А GeoPoint объект, который представляет положение вашего крана, передается методу onTap () при закладке где-то на карте.


onClick() здесь не используется. Вам нужно будет переопределить onTouchEvent(). вот пример проекта показ с помощью onTouchEvent() перетащить ItemizedOverlay флажки на карте.

даны координаты экрана касания, вы можете использовать Projection (от getProjection() on MapView), чтобы перевести в широту и долготу.


современный ответ, используя Android Maps v2, заключается в использовании OnMapClickListener, который дает вам LatLng крана на карте.

https://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html


Я поставил некоторые детали моей реализации в этом вопросе: Как ответить на нажатие на Android MapView, но игнорировать pinch-zoom?

проблема, которую я нашел с использованием onTap (), заключается в том, что он также увольняется, когда вы сжимаете масштаб, что не было нужно моему приложению. Поэтому, если вам нужен pinch-zoom, мой код должен делать то, что вам нужно.


попробуйте это:

private class OverlayMapa extends Overlay {

 @Override
 public void draw(Canvas canvas, MapView mapView, boolean shadow) 
 {
   ...
 }

 @Override
 public boolean onTap(GeoPoint point, MapView mapView) 
 {
   Context contexto = mapView.getContext();
   String msg = "Lat: " + point.getLatitudeE6()/1E6 + " - " + 
                "Lon: " + point.getLongitudeE6()/1E6;

   Toast toast = Toast.makeText(contexto, msg, Toast.LENGTH_SHORT);
   toast.show();

  return true;
 }
}

Как сказал @CommonsWare, вам нужно использовать onTouch() функции, а не onClick(). Вот пример, это именно то, что вам нужно : http://mobiforge.com/developing/story/using-google-maps-android