检测拖动停止谷歌地图android

时间:2015-05-25 11:23:30

标签: android google-maps

我正在编写一个代码来获取地图片段的中心lat-long并找到它周围的一些地方。为此,当用户拖动地图时,我将中心的lat-long传递给web api以获取位置。由于我使用CameraChangeListener获取中心的lat-long,因此它会在每次拖动时返回多个位置,从而增加不必要的网络调用。

我想检测拖拽并在几秒钟后调用,以便用户有足够的时间指出他想要的位置。

请建议一种方法。

谢谢: - )

1 个答案:

答案 0 :(得分:1)

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

您必须延长SupportMapFragmentMapFragment。在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);
        }
    }
};