在Android上使用Google Map动画数百个标记

时间:2014-07-15 22:20:11

标签: android google-maps animation marker

我的Android项目中Google Map上有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上使用Google Maps v2&gt; 4.0)

P.S。我没有计划在地图完全缩小时运行动画,所以我可能永远不会同时移动所有300个标记,但我仍然希望得到关于解决此问题的最佳方法的反馈。谢谢!

enter image description here

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用asynchronous task? 这将强调您的主UI线程,并将“计算”抛给后台。从而使您的地图更具响应性而不是滞后。

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

  1. 创建Asynch类。

  2. 在Do背景方法中放置您的标记计算方法等。

    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
    }
    
  4. 注意我假设您已经拥有300个标记的Lat / Lng坐标,并且只绘制它们需要永远。但是,如果你没有坐标,你可以为它创建一个Asych任务并释放你的主线程。