android - 在循环执行中提供延迟

标签 android google-maps delay

我有一个 for 循环,我在其中调用一个方法来在 map 中显示兴趣点。现在我要做的是按顺序显示每个 poi。我的意思是现在 for 循环一次完成并最终呈现最终输出。

但我希望它是有序的,这意味着每次 for 循环迭代时我都应该能够看到这些地理点从一个地方移动到另一个地方的动画。

这是我的代码,

 for (i=currentPOIindex;i<arraypoi.size();i++) {
            poi = arraypoi.get(i);
            latitude = poi.getLatitude().toString();
            longitude = poi.getLongitude().toString();
            placename = poi.getPlaceName().toString();
            mapdescription = poi.getPoiDecsription().toString();
            lat = Double.parseDouble(latitude);
            lng = Double.parseDouble(longitude);
            //use the poiIndex to identify which poi is highlighted
            itemizedOverlay.poiIndex = i;
            geopoint = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
            OverlayItem overlayitem = new OverlayItem(geopoint,fitTextToMapCallout(placename), fitTextToMapCalloutDescription("hello"));
            itemizedOverlay.addOverlay(overlayitem);
            mapOverlays.add(itemizedOverlay);
           //this method is meant to move to each geopint one by one. 
           //And I am trying to give a delay before this method is called
            moveToPOI(i);
        }


  public void moveToPOI(int currentPOI) {
    try {
        AudioMapOverLay overlay = (AudioMapOverLay) mapOverlays.get(currentPOI);
        poi = arraypoi.get(currentPOI);
        latitude = poi.getLatitude().toString();
        longitude = poi.getLongitude().toString();
        placename = poi.getPlaceName().toString();
        lat = Double.parseDouble(latitude);
        lng = Double.parseDouble(longitude);
        geopoint = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
        overlay.onForwardOrRewind(currentPOI, overlay);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我尝试使用 Thread.sleep(long ms);但这不是解决方案,谁能告诉我该怎么做?

最佳答案

你应该在你的 For 循环中做这样的事情:

  final Handler handler = new Handler();
   for (i=currentPOIindex;i<arraypoi.size();i++) {
          poi = arraypoi.get(i);
          latitude = poi.getLatitude().toString();
          longitude = poi.getLongitude().toString();
          placename = poi.getPlaceName().toString();
          mapdescription = poi.getPoiDecsription().toString();
           lat = Double.parseDouble(latitude);
           lng = Double.parseDouble(longitude);
        //use the poiIndex to identify which poi is highlighted
           itemizedOverlay.poiIndex = i;
           geopoint = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
            OverlayItem overlayitem = new  OverlayItem(geopoint,fitTextToMapCallout(placename), fitTextToMapCalloutDescription("hello"));
        itemizedOverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedOverlay);
       //this method is meant to move to each geopint one by one. 
       //And I am trying to give a delay before this method is called
        handler.postDelayed(new Runnable() {
        @Override
      public void run() {
     //Do something after 100ms
       moveToPOI(i);

   }
  }, 100/*This is Delay Value in Milli Second set which suit for your /*);  


    }

关于android - 在循环执行中提供延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9971238/

相关文章:

c - <dos.h> 头文件在代码块中工作吗?

android - 如何在 Android 应用程序中嵌入 HTML 代码?

android - 单元测试 RecyclerView OnItemTouchListener Robolectric

android - 在谷歌地图 api 2 上 move 标记

java - 在图像上设置延迟,然后将其删除

Flutter 音频播放器延迟

安卓 Activity 崩溃

java - Kotlin 传递对象类作为参数初始化

javascript - 函数声明不应放在 block 中

javascript - 删除由缩放引起的谷歌地图上的网格线