Получить координаты на карте нажав в 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 ответов

Решение

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

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

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

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

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

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

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

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

В этом вопросе я изложил некоторые детали своей реализации: как мне реагировать на нажатие Android MapView, но игнорировать пинч-зум?

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

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

Другие вопросы по тегам