首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Google Map Polygon单击事件

Android Google Map Polygon单击事件
EN

Stack Overflow用户
提问于 2013-08-26 21:21:42
回答 2查看 7.6K关注 0票数 3

我在安卓上的地图应用程序上工作,我正在使用谷歌地图安卓API V2。我从web服务中获取多边形数据,通过XML解析将其转换,并可以在地图上显示它。但是,当用户触摸任何多边形时,难道没有像弹出窗口一样打开的方法吗?或者,如果用户想要更改选定多边形的坐标。我看过很多例子,但它们都是用javascript完成的,或者有些是用不同的第三方完成的。有人有什么建议吗?提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-09-05 19:08:33

我也有同样的问题。onMapClickListener不会在用户点击多边形时调用,它仅在其他覆盖(如多边形)不处理点击事件时调用。多边形确实会处理它,正如你所看到的- GM将多边形移动到屏幕的中心。并且该事件不会传递给onMapClickListener,仅此而已。为了解决这个问题,我在GM处理它们之前截获了点击事件,在视图包装MapFragment中,如上所述here,从屏幕坐标投影点击点到地图,然后检查它是否像here所描述的那样在地图上的多边形内(其他答案也说明了这一点)

相关代码:

代码语言:javascript
复制
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);
  }
}

}

BasicMapActivity:

代码语言:javascript
复制
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);
}

布局:

代码语言:javascript
复制
<?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>
票数 1
EN

Stack Overflow用户

发布于 2013-08-27 06:05:14

您所要使用的就是onMapClickListener,它返回印刷机的最新消息

公共抽象空白点(LatLng onMapClick )

当用户在地图上做出点击手势时调用,但仅当地图的所有覆盖都不处理该手势时调用。此方法的实现始终在主线程上调用。参数指向被点击的地面上的点(从屏幕点投影)。

然后检查latlng是否在多边形内部。

How to determine if a point is inside a 2D convex polygon?

我把这些拼凑在一起,但好消息是lat和lng已经是两倍了。祝好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18445191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档