如何在 Google Map API v2 中处理地图的 onTouch 事件? [英] How to handle onTouch event for map in Google Map API v2?

查看:33
本文介绍了如何在 Google Map API v2 中处理地图的 onTouch 事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

GoogleMap 默认不提供地图拖动开始和拖动停止的事件.我已经报告了这个问题这里.

GoogleMap by default doesn't provide event for map drag start and drag stop. I have already reported that problem here.

我想制作自定义 handler,它将使用普通的onTouch 事件并将其与setOnCameraChangeListener 结合起来.

I want to make custom handler that will use plain onTouch event and combine it with setOnCameraChangeListener.

但是我没有找到如何访问 GoogleMap 对象的 onTouch 事件.它不提供这样的回调.

However i failed to find how I can access onTouch event of GoogleMap object. It doesn't provide such callback.

我想知道如何在 Google Map API v2 中处理地图的 onTouch 事件?

I wonder how can i handle onTouch event for map in Google Map API v2?

推荐答案

以下是确定拖动开始和拖动结束事件的可能解决方法:

Here is a possible workaround for determining drag start and drag end events:

您必须扩展SupportMapFragmentMapFragment.在 onCreateView() 中,您必须将 MapView 包装在自定义的 FrameLayout 中(在下面的示例中,它是 TouchableWrapper 类>),在其中拦截触摸事件并识别地图是否被点击.如果您的 onCameraChange 被调用,只需检查地图视图是否被按下(在下面的示例中,这是变量 mMapIsTouched).

You have to extend SupportMapFragment or MapFragment. In onCreateView() you have to wrap your MapView in a customized FrameLayout (in example below it is the class TouchableWrapper), in which you intercepts touch events and recognizes whether the map is tapped or not. If your onCameraChange gets called, just check whether the map view is pressed or not (in example below this is the variable mMapIsTouched).

示例代码:

更新 1:

  • getView()
  • 中返回原始创建的视图
  • 使用 dispatchTouchEvent() 而不是 onInterceptTouchEvent()

自定义框架布局:

private class TouchableWrapper extends FrameLayout {
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
        mMapIsTouched = true;
        break;

    case MotionEvent.ACTION_UP:
        mMapIsTouched = false;
        break;
        }

        return super.dispatchTouchEvent(ev);
    }
    }

在您自定义的 MapFragment 中:

In your customized MapFragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
    mOriginalContentView = super.onCreateView(inflater, parent, savedInstanceState);

    mTouchView = new TouchableWrapper(getActivity());
    mTouchView.addView(mOriginalContentView);

    return mTouchView;
}

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

在您的相机更改回调方法中:

In your camera change callback method:

private final OnCameraChangeListener mOnCameraChangeListener = new OnCameraChangeListener() {
    @Override
    public void onCameraChange(CameraPosition cameraPosition) {
        if (!mMapIsTouched) {
            refreshClustering(false);
        }
    }
};

这篇关于如何在 Google Map API v2 中处理地图的 onTouch 事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆