使用animateCamera()后如何以编程方式刷新Google Map?
问题:Google Maps 使用animateCamera后地图刷新缓慢(模糊),手动操作才恢复清晰
以下是我使用的代码:
newPosition = new CameraPosition(new LatLng(latitude, longitude), zoomLevel, tilt, currentBearing); CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(newPosition); googleMap.animateCamera(cameraUpdate);
使用animateCamera()进行地图缩放或移动相机位置后,地图刷新耗时很长,显示模糊状态。但动画结束后手动点击屏幕或者微调相机,地图就会立即刷新到清晰状态。
- 相机移动后的模糊状态
- 期望的清晰状态
我已经查阅了Google Maps官方文档,但没找到地图刷新的相关方法,请问有没有可以通过编程方式主动刷新地图的方案?
解决方案
可以试试以下几种方案解决这个问题:
- 监听动画结束事件,微调相机位置
在调用animateCamera时传入CancelableCallback,在动画结束后对相机位置做极小幅度调整,模拟手动微调的触发逻辑,强制地图刷新:
googleMap.animateCamera(cameraUpdate, new CancelableCallback() { @Override public void onFinish() { CameraPosition currentPos = googleMap.getCameraPosition(); // 微调经纬度(极小值,不会产生视觉位移) LatLng tinyMove = new LatLng(currentPos.target.latitude + 0.000001, currentPos.target.longitude + 0.000001); googleMap.moveCamera(CameraUpdateFactory.newLatLng(tinyMove)); // 移回原位置,保证最终位置不变 googleMap.moveCamera(CameraUpdateFactory.newLatLng(currentPos.target)); } @Override public void onCancel() { // 动画取消时的逻辑处理 } });
- 切换地图类型触发重渲染
通过切换为当前相同的地图类型,触发地图内部的重新渲染流程:
googleMap.animateCamera(cameraUpdate, new CancelableCallback() { @Override public void onFinish() { int currentType = googleMap.getMapType(); googleMap.setMapType(currentType); } @Override public void onCancel() { } });
- 改用moveCamera(无需动画场景)
如果不需要相机移动的动画效果,直接使用moveCamera大概率不会出现模糊问题:
googleMap.moveCamera(cameraUpdate);
这些方案都是利用触发地图内部的刷新机制来解决问题,在多数场景下都能有效解决animateCamera后的模糊延迟问题。
内容的提问来源于stack exchange,提问作者berchoes
相关产品推荐
相关产品推荐

