我的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个标记,但我仍然希望得到关于解决此问题的最佳方法的反馈。谢谢!
答案 0 :(得分:0)
您是否考虑过使用asynchronous task? 这将强调您的主UI线程,并将“计算”抛给后台。从而使您的地图更具响应性而不是滞后。
这是我可能会考虑的事情......
创建Asynch类。
在Do背景方法中放置您的标记计算方法等。
protected String doInBackground(Location... params) {
// Show user a Progress bar/Dialog
// your markers plotting function here...
}
在帖子后执行功能还原为地图
protected void onPostExecute(String result) {
// Revert back to map
}