【问题标题】:Animate hundreds of markers with Google Map on Android在 Android 上使用 Google 地图为数百个标记设置动画
【发布时间】:2014-07-15 22:20:10
【问题描述】:

在我的 Android 项目中,Google 地图顶部有 300 多个标记。从屏幕截图中可以看出,它们是旧金山的车辆。 我有车辆的方向和速度,我想在下次调用 API 之前为它们设置 10 秒的动画。

要为一个标记设置动画,我使用以下代码:

static void animateMarkerToICS(Marker marker, LatLng finalPosition, final LatLngInterpolator latLngInterpolator) {
    TypeEvaluator<LatLng> typeEvaluator = new TypeEvaluator<LatLng>() {
        @Override
        public LatLng evaluate(float fraction, LatLng startValue, LatLng endValue) {
            return latLngInterpolator.interpolate(fraction, startValue, endValue);
        }
    };
    Property<Marker, LatLng> property = Property.of(Marker.class, LatLng.class, "position");
    ObjectAnimator animator = ObjectAnimator.ofObject(marker, property, typeEvaluator, finalPosition);

    animator.setInterpolator(new LinearInterpolator());

    animator.setDuration(ANIMATION_MILLIS);
    animator.start();
}

当我为所有 300 个标记调用此方法时,地图正如预期的那样缓慢且响应不快。

问题是,同时为 300 个标记设置动画的最佳方法是什么? 有没有一种有效的方法来实现这项任务的良好性能?

(我在 Android > 4.0 上使用 Google Maps v2)

附言我不打算在地图完全缩小时运行动画,所以我可能永远不会同时移动所有 300 个标记,但我仍然希望获得有关解决此问题的最佳方法的反馈。谢谢!

【问题讨论】:

  • 您找到解决方案了吗?像这样仅对单个标记进行动画处理,每秒会创建数千个内部对象 =(
  • @robsf 你能帮我看看你是如何调用这个方法的,以及你在其中传递了哪些值。这是我的代码:pastebin.com/yQZEZsf2

标签: android google-maps animation marker


【解决方案1】:

您是否考虑过使用asynchronous task? 这将把重点从您的主 UI 线程上移开,并将“计算”抛到后台。从而使您的地图更具响应性而不是滞后。

这是我可能会考虑的事情......

  1. 创建一个异步类。

  2. 在做背景方法中放你的标记计算方法等。

    protected String doInBackground(Location... params) {
      // Show user a Progress bar/Dialog    
      // your markers plotting function here... 
    }
    
  3. 在发布后执行功能恢复到地图

    protected void onPostExecute(String  result) {
     // Revert back to map
    }
    

请注意,我假设您已经拥有 300 个标记的纬度/经度坐标,并且仅绘制它们需要很长时间。但是,如果您没有坐标,您也可以为此创建一个 Asych 任务并释放您的主线程。

【讨论】:

  • 位置已经异步加载,并且动画代码已经从后台任务中调用。那不是问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多