停止/暂停迭代器 [英] Stop / Pause an Iterator

查看:173
本文介绍了停止/暂停迭代器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Google Map上实现Markers的动画.我遇到的问题是正在启动某个动画,而针对特定标记的另一个动画仍在发生.

I am trying to implement an animation of Markers on a Google Map. The issue I am running into is an Animation being started while another Animation is still happening for a specific Marker.

有没有一种方法可以停止循环的迭代,并且仅在出现以下情况时才继续 符合特定条件?

Is there a way to stop the iteration of a loop, and continue only when a certain criteria is met?

获取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();
                    }

                }
            }

        }
    });
}

推荐答案

创建全局静态布尔值

public static boolean criteriaMet=false;

符合条件后,将其设置为true.仅当标志为true时,才继续循环的迭代.

After your criteria is met set it to true. Continue the iteration of the loop only if the flag is true.

这篇关于停止/暂停迭代器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆