Получить координаты при нажатии на карту в 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);
}
}
Ответы
Ответ 1
Попробуйте следующее.
Напишите класс, который происходит из класса Overlay и переопределяет onTap(). Затем вы можете добавить свой оверлей к MapView. Объект GeoPoint, который представляет позицию вашего нажатия, передается методу onTap(), когда вы размещаете где-нибудь на карте.
Ответ 2
onClick()
здесь не используется. Вам необходимо переопределить onTouchEvent()
. Вот пример проекта, показывающий использование onTouchEvent()
для перетаскивания плагинов ItemizedOverlay
.
Учитывая координаты экрана касания, вы можете использовать Projection
(от getProjection()
on MapView
), чтобы преобразовать его в широту и долготу.
Ответ 3
Современный ответ с использованием Android Maps v2 заключается в использовании OnMapClickListener, который дает вам LatLng крана на карте.
https://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
Ответ 4
Я поставил некоторые детали моей реализации в этом вопросе:
Как мне ответить на нажатие на Android MapView, но игнорировать масштабирование?
Проблема, с которой я столкнулась при использовании onTap(), заключается в том, что она также запускается, когда вы щелкаете-зум, что не то, что нужно моему приложению. Поэтому, если вам нужен масштабирование, мой код должен делать то, что вам нужно.
Ответ 5
Попробуйте следующее:
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;
}
}
Ответ 6
Как и @CommonsWare, вам нужно использовать функцию onTouch()
, а не onClick()
. Вот пример, это именно то, что вам нужно: http://mobiforge.com/developing/story/using-google-maps-android