startActivityForResult让用户在地图上输入位置

时间:2012-08-18 18:57:17

标签: android google-maps android-intent android-mapview

我正在处理一个需要知道用户输入位置的活动。理想情况下,用户会在我的活动中按一个按钮,然后将用户发送到他们可以放置别针的地图活动中,然后使用引脚位置返回我的活动。

在Android中有一种简单的方法可以做到这一点,还是我必须制作自己的MapView?

2 个答案:

答案 0 :(得分:2)

您必须制作自己的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类,请参阅此Google Maps Tutorial以获取确切的实现。这将在您在地图上单击的任何位置创建标记,并将结果(纬度,经度)返回到您调用它的原始活动。

答案 1 :(得分:0)

我将更难以制作“自己的”mapview。 我认为你的意思是使用ItemizedOverlay课程。您可以通过覆盖此类的onTap()方法将引脚放入mapview。