Android 谷歌地图多边形点击事件

标签 android google-maps coordinates polygon android-maps

<分区>

我正在 Android 上开发 map 应用程序,我正在使用 Google Maps Android API V2。我从 Web 服务获取多边形数据,通过 XML 解析对其进行转换,然后可以毫无问题地将其显示在 map 上。但是,当用户触摸任何多边形时,有没有办法像弹出窗口一样打开?或者如果用户想要更改所选多边形的坐标。我看到了很多例子,但它们是用 javascript 或一些使用不同的第三方完成的。有人有什么建议吗?提前致谢。

最佳答案

我遇到了同样的问题。 onMapClickListener 不会在用户点击多边形时调用,它只会在其他叠加层(例如多边形)未处理点击事件时调用。正如您所见,Polygon 会处理它 - GM 将多边形移动到屏幕中心。并且事件没有传递给onMapClickListener,仅此而已。 为了解决这个问题,我在 GM 处理点击事件之前拦截它们,在 View 包装 MapFragment 中,如所述 here ,将屏幕坐标中的点击点投影到 map ,然后检查它是否在 map 上的多边形内,如所述here (其他答案也说明了这一点)

相关代码:

public class MySupportMapFragment extends SupportMapFragment {
private View mOriginalContentView;
private TouchableWrapper mTouchView;
private BasicMapActivity mActivity;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mActivity = (BasicMapActivity) getActivity();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent,
        Bundle savedInstanceState) {
    mOriginalContentView = super.onCreateView(inflater, parent,
            savedInstanceState);
    mTouchView = new TouchableWrapper();
    mTouchView.addView(mOriginalContentView);
    return mTouchView;
}

@Override
public View getView() {
    return mOriginalContentView;
}

class TouchableWrapper extends FrameLayout {

    public TouchableWrapper() {
        super(mActivity);
    }

    @Override
  public boolean dispatchTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
          break;
      case MotionEvent.ACTION_UP: {
          int x = (int) event.getX();
          int y = (int) event.getY();
          mActivity.tapEvent(x,y);
          break;
      }
    }
    return super.dispatchTouchEvent(event);
  }
}

}

基本 map Activity :

public void tapEvent(int x, int y) {
    Log.d(TAG,String.format("tap event x=%d y=%d",x,y));
    if(!isEditMode()) {
        Projection pp = mMap.getProjection();
        LatLng point = pp.fromScreenLocation(new Point(x, y));
        for (Shape ss : mPolygons) {
            if(ss.isPointInPolygon(point)) {
                ss.mMarkers.get(0).marker.showInfoWindow();
            }
        }
    }
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
}

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="au.com.datalink.plugins.MySupportMapFragment" />

</RelativeLayout>

关于Android 谷歌地图多边形点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18445191/

相关文章:

Python 3.0 使用turtle.onclick

ios - ccpSub 实现获取 2 个坐标的角度

android 在更新之前强制卸载应用程序

android - 使用 AlarmManager.setRepeating 每 5 秒运行一次服务

android - android中的谷歌地图,以小尺寸 map View 显示

python - 如何将坐标值 append 到坐标数组?

java - 检查 URL 的 mimetype 是否不是网页

android - 为什么在项目中使用不同的 Google API key ?

javascript - Json 字符串转 Google map 标记

javascript - 在 Google map 上收到奇怪的列/形状