【问题标题】:How to move multiple markers simultaneously如何同时移动多个标记
【发布时间】:2018-08-14 09:09:02
【问题描述】:

我已经开发了一个 android 应用程序,它显示附近的车辆,其 latlng 将被保存到 locationchanged 上的服务器,这将是 jsonarray 结果,我将能够通过动画在 mapbox 地图上添加标记我能够将单个标记移动到下一个更新的 latlng 值。我无法同时移动地图导航视图上显示的所有标记,因为它们已更新。标记一一移动到更新的位置

HashMap<Integer, Marker> markerhash = new HashMap<Integer, Marker>();
if (json.getString("status").equalsIgnoreCase("success")) {
  Alllocations = json.getJSONArray("locations");
  for (int i = 0; i < Alllocations.length(); i++) {
    JSONObject LocInfo = Alllocations.getJSONObject(i);
    int id = LocInfo.getInt("user_id");
    if (markerhash.containsKey(id)) {
      marker = markerhash.get(id);
      marker.setIcon(icon);
      ValueAnimator markerAnimator = ValueAnimator.ofObject(new LatLngEvaluator(), (Object[]) new LatLng[] {marker.getPosition(), new LatLng(LocInfo.getDouble("latitude"), LocInfo.getDouble("longitude"))});

      markerAnimator.setDuration(2000);
      markerAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
      markerAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
          if (marker != null) {
            marker.setPosition((LatLng) animation.getAnimatedValue());
          }
        }
      });
      markerAnimator.start();

    } else {
      marker = navigationView.getMapboxMap().addMarker(new MarkerOptions()
        .position(new LatLng(LocInfo.getDouble("latitude"), LocInfo.getDouble("longitude")))
        .snippet(String.valueOf(LocInfo.getInt("user_id")))
        .icon(icon)
      );
      markerhash.put(id, marker);

    }
  }
}

【问题讨论】:

    标签: android mapbox-android


    【解决方案1】:

    您需要发布代码以获得适当的支持!

    也就是说,您是否考虑过简单地删除所有标记并在每次迭代时同时重新绘制它们?

    【讨论】:

    • 由于 json 数组遍历 for 循环,我无法连续为所有标记设置动画,它正在被一一更新。有时标记会闪烁,因为其他 json 数组结果在标记完成动画时会很快出现。我可以知道不使用循环我们可以一次添加所有标记并将它们全部更新。
    • @beetle 我只会在没有动画的情况下这样做。只需将所有标记放在新位置即可。您多久更新一次职位?
    • onlocaton 更改了 json 数组结果将被调用以实时同步,我需要让标记在他们在车辆中行驶时移动。所以我需要知道不使用循环是否有任何方法可以一次添加所有标记并一次更新所有标记
    • @beetle 如果您坚持这样做,您可以尝试将每个循环包装在一个线程中。但我仍然认为最好的方法是跳过动画并简单地更新所有标记的新位置。
    • 为什么动画在这里是个问题?好的,你能帮我把上面代码的每个循环包装在一个线程中吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2011-04-26
    • 1970-01-01
    • 2013-04-08
    • 2019-12-31
    • 2013-06-01
    相关资源
    最近更新 更多