Получить координаты на карте нажав в Android - PullRequest
15 голосов
/ 14 ноября 2010

Я пытаюсь сделать что-то вроде этого: у меня есть активность карты, и когда пользователь нажимает на карту, он показывает координаты этого местоположения.Я уже переопределил метод 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 ]

17 голосов
/ 14 ноября 2010

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

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

7 голосов
/ 14 ноября 2010

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

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

3 голосов
/ 13 апреля 2014

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

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

2 голосов
/ 30 августа 2011

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

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;
 }
}
2 голосов
/ 04 февраля 2011

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

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

0 голосов
/ 14 ноября 2010

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

...