Android地图中包含doubleclick事件和平移事件的Google地图

时间:2014-08-13 10:55:50

标签: android google-maps double-click panning

我有不同的平移和双击谷歌地图的实现。我已经在this link的帮助下实现了平移功能。

但问题是,当用户双击地图时,地图上的更新会在action_up事件被触发两次时发生两次。

我的要求是不要在双击上做任何事情,以及一点点地图也应该用作地图的平移(在Action_up事件中更新地图的原因)。

1 个答案:

答案 0 :(得分:0)

你的问题有点不清楚,但我认为你想要的是防止双击更新你的地图两次。

使用您提供的代码(来自链接),为防止双击更新地图两次,您可以使用此代码:

public  class TouchableWrapper extends FrameLayout {

    // Map updates only when click has been done 250 Milliseconds  after the last one
    private long lastClicked;
    private static final long CLICK_DELAY = 250L;

    private long lastTouched = 0;
    private static final long SCROLL_TIME = 200L; // 200 Milliseconds, but you can adjust that to your liking
    private UpdateMapAfterUserInterection updateMapAfterUserInterection;

    public TouchableWrapper(Context context) {
        super(context);
        // Force the host activity to implement the UpdateMapAfterUserInterection Interface
        try {
            updateMapAfterUserInterection = (ActivityMapv2) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString() + " must implement UpdateMapAfterUserInterection");
        }
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                lastTouched = SystemClock.uptimeMillis();
                break;
            case MotionEvent.ACTION_UP:
                final long now = SystemClock.uptimeMillis();
                if (now - lastTouched > SCROLL_TIME) {
                    if (lastClicked == 0 || ( now - lastClicked  > CLICK_DELAY)) {
                        // Update the map
                        updateMapAfterUserInterection.onUpdateMapAfterUserInterection();
                        lastClicked = now;
                    }
                }
                break;
        }
        return super.dispatchTouchEvent(ev);
    }

    // Map Activity must implement this interface
    public interface UpdateMapAfterUserInterection {
        public void onUpdateMapAfterUserInterection();
    }

}

说明:

这节省了上次UP动作的时间。然后,当下一个发生时,它检查是否已经过了250毫秒,如果没有,则跳过更新。

但是,如果您想要阻止双击更新地图,则需要在特定时间内延迟整个更新。在此期间,您检查是否有任何额外的点击,如果它们发生,您取消地图的更新。