我有不同的平移和双击谷歌地图的实现。我已经在this link的帮助下实现了平移功能。
但问题是,当用户双击地图时,地图上的更新会在action_up事件被触发两次时发生两次。
我的要求是不要在双击上做任何事情,以及一点点地图也应该用作地图的平移(在Action_up事件中更新地图的原因)。
答案 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毫秒,如果没有,则跳过更新。
但是,如果您想要阻止双击更新地图,则需要在特定时间内延迟整个更新。在此期间,您检查是否有任何额外的点击,如果它们发生,您取消地图的更新。