我正在使用Google Maps V2,并且需要在用户移动地图时调用方法。 我正在使用.setOnCameraChangedListener(),每次移动地图时都会触发。从这个事件监听器,我可以调用我的方法。
问题在于,如果用户非常缓慢地移动地图,则会在一秒钟内多次触发事件。我从事件调用的方法是耗时的,我不希望它被频繁调用。
如何维持一个持续推迟延迟的计时器,直到用户真正停止与地图交互为止。这样,我的方法将在上次触发事件的300ms后被调用。
我已经尝试过,同步了,asyncTask(一遍又一遍地使用.cancel和.start),但似乎没有什么可以解决的。
答案 0 :(得分:2)
将以下内容添加为字段:
private Handler cameraChangeHandler = new Handler();
private Runnable throttledRunnable = new Runnable() {
@Override
public void run() {
// code that should run when user interaction has stopped for 300ms
}
};
然后在onCameraChange中执行以下操作:
@Override
public void onCameraChange(CameraPosition cameraPosition) {
cameraChangeHandler.removeCallbacks(throttledRunnable);
cameraChangeHandler.postDelayed(throttledRunnable, 300);
}