停止/暂停迭代器

时间:2015-05-27 18:35:01

标签: java android google-maps animation

我正在尝试在Google地图上实施标记动画。我遇到的问题是正在启动动画,而另一个动画仍在针对特定标记发生。

  

是否有办法停止循环的迭代,并且仅在何时继续   符合某个标准?

获取LatLng - 开始动画 - 回调火力(完成动画) - 获取LatLng等等

public void animateMarker(final String key, final List<LatLng> latlngList) {
    Log.e(TAG, "------------- MARKER " + key + "-------------");

    Handler mHandler = new Handler();
    mHandler.post(new Runnable() {

        final AnimateCarObj animateCarObj = animateCarObjMap.get(key);
        final Marker marker = markersHashMap.get(key);
        Boolean isAnimationRunning = false;

        @Override
        public void run() {
            final Iterator<LatLng> iterator = latlngList.iterator();
            while (iterator.hasNext()) {
                if (!(isAnimationRunning)) {
                    Log.e(TAG, "START -- " + key + ": " + iterator.next().toString());
                    try {
                        isAnimationRunning = true;
                        LatLngInterpolator latlonInter = new LinearFixed();
                        latlonInter.interpolate(1, marker.getPosition(), iterator.next());
                        MarkerAnimation.animateMarker(new RunningCallback() {
                            @Override
                            public void onFinish() {
                                Log.e(TAG, "FINISH -- " + key + ": " + iterator.next().toString());
                                isAnimationRunning = false;
                            }
                        }, latlngList.size(), marker, iterator.next(), latlonInter);

                    } catch (Exception e) {
                        Log.e(TAG, "EXCEPTION: " + e.getMessage());
                        e.printStackTrace();
                    }

                }
            }

        }
    });
}

2 个答案:

答案 0 :(得分:0)

只需使用while循环来停止迭代器逻辑。

while (iterator.hasNext()) {
    // wait
    while (!someBooleanConditionToWaitFor) { }

    // do your other stuff
    // when you're done your other stuff, set it back to false.
    someBooleanConditionToWaitFor = false;
}

动画完成后,将条件设置为true,以便继续。当您在该迭代结束时,将其设置为false,以便再次等待。

答案 1 :(得分:0)

创建一个全局静态布尔标志

public static boolean criteriaMet=false;

符合条件后,请将其设为true。仅当标志为真时才继续循环迭代。