我正在处理一个需要知道用户输入位置的活动。理想情况下,用户将在我的活动中按下一个按钮,然后将用户发送到地图活动中,他们可以在其中放置图钉,然后返回我与别针位置的活动。
在 Android 中是否有一种简单的方法可以做到这一点,还是我必须制作自己的 MapView?
我正在处理一个需要知道用户输入位置的活动。理想情况下,用户将在我的活动中按下一个按钮,然后将用户发送到地图活动中,他们可以在其中放置图钉,然后返回我与别针位置的活动。
在 Android 中是否有一种简单的方法可以做到这一点,还是我必须制作自己的 MapView?
您必须制作自己的 MapView,然后使用 onTouchListener() 来检测地图上的点击,并根据点击位置,您将能够使用以下代码获取地理点:
class HelloGoogleMaps extends MapActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
List<Overlays> mapOverlays = map.getOverlays();
//This is going to be your pointer (you can use whatever image you want as your indicator
final Drawable drawable = this.getResources().getDrawable(R.drawable.indicator);
map.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP)
{
HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, HelloGoogleMaps.this);
GeoPoint p = mapView.getProjection().fromPixels(
(int) event.getX(), (int) event.getY());
String lat = Double.toString(p.getLatitudeE6() / (Math.pow(10,6)));
String lon = Double.toString(p.getLongitudeE6() / (Math.pow(10,6)));
OverlayItem overlayitem = new OverlayItem(p, "Title text", "Body Text");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
map.postInvalidate();
Intent i = new Intent();
i.putExtra("latitude", Double.parseDouble(lat));
i.putExtra("longitude", Double.parseDouble(lon));
this.setResult(RESULT_OK, i);
finish();
return true;
}
}
});
}
关于上面提到的 HelloItemizedOverlay 类,具体实现请参考这个谷歌地图教程。这将在您在地图上单击的任何位置创建标记,并将结果(纬度、经度)返回到您调用它的原始活动。
我将更加难以制作您的“自己的”地图视图。我认为您的意思是使用ItemizedOverlay类。您可以通过覆盖此类的 onTap() 方法将引脚放置到 mapview。