Android Google Maps no UI

问题描述 投票:0回答:2

将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

如何仅在没有视觉的情况下在内存中创建地图?

谢谢^。^

android google-maps kotlin
2个回答
0
投票

看起来像是Google Maps的限制。读取GoogleMaps类documentation,无法像在iOS中使用MapKit一样完成。


0
投票

您可以使用Maps Static API 或尝试基于this MapViewlite 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);

                }
            });

        }
});
...
© www.soinside.com 2019 - 2024. All rights reserved.