GoogleMap的默认情况下不提供地图拖曳开始并拖动停止事件。 我已经报道,问题就在这里 。
我想进行自定义 handler
将使用纯onTouch
事件,并结合它setOnCameraChangeListener
。
但是我没有找到我怎么能访问onTouch
的事件GoogleMap
对象。 它不提供这样的回调 。
我不知道如何可以处理onTouch事件地图在谷歌地图API第2?
GoogleMap的默认情况下不提供地图拖曳开始并拖动停止事件。 我已经报道,问题就在这里 。
我想进行自定义 handler
将使用纯onTouch
事件,并结合它setOnCameraChangeListener
。
但是我没有找到我怎么能访问onTouch
的事件GoogleMap
对象。 它不提供这样的回调 。
我不知道如何可以处理onTouch事件地图在谷歌地图API第2?
下面是确定拖曳开始和结束拖动事件可能的解决方法:
你必须扩展SupportMapFragment
或MapFragment
。 在onCreateView()
你必须来包装你MapView
在自定义FrameLayout
(例如在下面,该类TouchableWrapper
),在其中截取的触摸事件,并确认地图是否被窃听或没有。 如果您onCameraChange
被调用,只需查地图视图是否被按下(例如下面这个是变量mMapIsTouched
)。
示例代码:
更新1:
getView()
dispatchTouchEvent()
代替onInterceptTouchEvent()
定制的FrameLayout:
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:
@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;
}
在你的相机更改回调方法:
private final OnCameraChangeListener mOnCameraChangeListener = new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
if (!mMapIsTouched) {
refreshClustering(false);
}
}
};
还有一个更简单的方法来做到这一点,在处理您的案件onCameraMoveStarted
这样的监听器
下面的代码片段
@Override
public void onCameraMoveStarted(int reason) {
if (reason == OnCameraMoveStartedListener.REASON_GESTURE) {
Toast.makeText(this, "The user gestured on the map.",
Toast.LENGTH_SHORT).show();
} else if (reason == OnCameraMoveStartedListener
.REASON_API_ANIMATION) {
Toast.makeText(this, "The user tapped something on the map.",
Toast.LENGTH_SHORT).show();
} else if (reason == OnCameraMoveStartedListener
.REASON_DEVELOPER_ANIMATION) {
Toast.makeText(this, "The app moved the camera.",
Toast.LENGTH_SHORT).show();
}
}