1

我正在使用 Google Maps V2,并且需要在用户移动地图时调用一个方法。我正在使用每次移动地图时触发的 .setOnCameraChangedListener() 。从这个事件监听器,我可以调用我的方法。

问题是,如果用户移动地图非常缓慢,事件会在一秒钟内触发多次。然而,我从事件中调用的方法非常耗时,我不希望它被如此频繁地调用。

我怎样才能保持一个计时器,不断推动延迟,比如 300 毫秒,直到用户真正停止与地图交互。这样我的方法将在最后一次触发事件的 300 毫秒后被调用。

我已经尝试过,同步,asyncTask(一遍又一遍地使用 .cancel 和 .start),但似乎没有什么效果很好。

4

1 回答 1

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);
}
于 2013-05-06T12:10:20.610 回答