如何在使用MapFragment(而不是MapView)时,在点击地图时获取其坐标?

11

我搜索了如何在点击地图时获取位置坐标的方法。然而,大多数(如果不是全部)示例都需要参数为 MapView 。例如:

public boolean onTap(GeoPoint p, MapView map){
    if ( isPinch ){
        return false;
    }else{
        Log.i(TAG,"TAP!");
        if ( p!=null ){
            handleGeoPoint(p);
            return true;            // We handled the tap
        }else{
            return false;           // Null GeoPoint
        }
    }
}

@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView)
{
    int fingers = e.getPointerCount();
    if( e.getAction()==MotionEvent.ACTION_DOWN ){
        isPinch=false;  // Touch DOWN, don't know if it's a pinch yet
    }
    if( e.getAction()==MotionEvent.ACTION_MOVE && fingers==2 ){
        isPinch=true;   // Two fingers, def a pinch
    }
    return super.onTouchEvent(e,mapView);
}

那么我如何使用MapFragment而不是MapView来获取地图上点击位置的坐标?

1个回答

27

Google Play服务SDK提供的示例代码中有一个例子。这个例子使用了SupportMapFragment,所以如果您正在使用新的MapFragment,它可能不会太有帮助。

此地图示例代码中EventsDemoActivity使用的方法是将OnMapClickListener实现到类中。以下是一些您可以使用的代码。

EventsDemoActivity:

public class EventsDemoActivity extends FragmentActivity
    implements OnMapClickListener, OnMapLongClickListener {

    private GoogleMap mMap;
    private TextView mTapTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.events_demo);

        mTapTextView = (TextView) findViewById(R.id.tap_text);

        setUpMapIfNeeded();
    }

    private void setUpMap() //If the setUpMapIfNeeded(); is needed then...
    {
        mMap.setOnMapClickListener(this);
        mMap.setOnMapLongClickListener(this);
    }

    @Override
    public void onMapClick(LatLng point) {
        mTapTextView.setText("tapped, point=" + point);
    }

    @Override
    public void onMapLongClick(LatLng point) {
        mTapTextView.setText("long pressed, point=" + point);
    }
}


events_demo.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">
  <TextView
    android:id="@+id/tap_text"
    android:text="@string/tap_instructions"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
  <fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"/>
</LinearLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接