将iOS应用中的某些行为复制到Android,其中一项要求是能够生成地图快照。 Google Maps确实提供了创建地图snapshot的功能,但是与iOS应用程序不同,我没有看到仅在内存中创建地图然后将其保存到数据库的方法。我之前已经创建过地图,但通常都是为了显示地图并与用户进行交互。在这种情况下,我什么都不想要。此时应该没有地图可供查看。稍后,将从快照生成的图像(位图)传递给用户。
我已经将onMapReady函数全部设置为这样
override fun onMapReady(map: GoogleMap?) {
map?.let {
//add route
it.addPolyline(routeLines)
//add markers
for(marker in markerOptions) {
it.addMarker(marker)
}
val callback = GoogleMap.SnapshotReadyCallback(){
saveSnapshot(it)
}
it.snapshot(callback)
}
}
但是在甚至可以调用onMapReady之前,地图本身需要启动。
var mMap: GoogleMap? = null
如何仅在没有视觉的情况下在内存中创建地图?
谢谢^。^
看起来像是Google Maps的限制。读取GoogleMaps类documentation,无法像在iOS中使用MapKit一样完成。
您可以使用Maps Static API 或尝试基于this MapView
的lite mode解决方案:
... mMapView = new MapView(this, options); mMapView.onCreate(mapViewBundle); mMapView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { // form your card (add markers, path etc.) here: googleMap.addMarker(new MarkerOptions() .position(KYIV) .title("Kyiv")); // set map size in pixels and initiate image loading mMapView.measure(View.MeasureSpec.makeMeasureSpec(mMapWidth, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(mMapHeight, View.MeasureSpec.EXACTLY)); mMapView.layout(0, 0, mMapWidth, mMapHeight); googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { @Override public void onMapLoaded() { mMapView.setDrawingCacheEnabled(true); mMapView.measure(View.MeasureSpec.makeMeasureSpec(mMapWidth, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(mMapHeight, View.MeasureSpec.EXACTLY)); mMapView.layout(0, 0, mMapWidth, mMapHeight); mMapView.buildDrawingCache(true); Bitmap b = Bitmap.createBitmap(mMapView.getDrawingCache()); mMapView.setDrawingCacheEnabled(false); mImageView.setImageBitmap(b); } }); } }); ...