如何在 Google Map API v2 中处理地图的 onTouch 事件? [英] How to handle onTouch event for map in Google Map API v2?
问题描述
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:
您必须扩展SupportMapFragment
或MapFragment
.在 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屋!