如何拍摄当前MapView的截图?

时间:2012-05-25 11:54:27

标签: android android-mapview

我有两个按钮和一个mapView。当我按下其中一个按钮时,我想保存MapView的视图。

任何人都知道如何做到这一点?

3 个答案:

答案 0 :(得分:3)

你必须为按钮添加一个监听器(你应该知道这是怎么做的)并且在那个监听器中,做类似的事情:

boolean enabled = mMapView.isDrawingCacheEnabled();
mMapView.setDrawingCacheEnabled(true);
Bitmap bm = mMapView.getDrawingCache();

/* now you've got the bitmap - go save it */

File path = Environment.getExternalStorageDirectory();
path = new File(path, "Pictures");
path.mkdirs();  // make sure the Pictures folder exists.
File file = new File(path, "filename.png");
BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(file));
boolean success = bm.compress(CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();

mMapView.setDrawingCacheEnabled(enabled);   // reset to original value

为了让图像立即显示在图库中,您必须向MediaScanner通知新图像,如下所示:

if (success) {
    MediaScannerClientProxy client = new MediaScannerClientProxy(file.getAbsolutePath(), "image/png");
    MediaScannerConnection msc = new MediaScannerConnection(this, client);
    client.mConnection = msc;
    msc.connect();
}

答案 1 :(得分:1)

我以这种方式使用OSMDroid仅拍摄片段屏幕。

kotlin.text.StringBuilder

这些就是结果。我的屏幕应用程序带有OSMDroid片段和按钮“保存地图”: enter image description here

我的map.png保存在只显示OSMDroid片段的手机文件夹中: enter image description here

答案 2 :(得分:0)

谷歌地图有一个拍摄快照的功能所以在这里使用这个例子,它返回一个你可以在图像视图上设置的位图,它的简单...

Bitmap bitmapMapsattelite ;

map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
                        @Override
                        public void onMapLoaded() {
                            // Make a snapshot when map's done loading
                            map.snapshot(new GoogleMap.SnapshotReadyCallback() {
                                @Override
                                public void onSnapshotReady(Bitmap bitmap) {
                                    bitmapMapsattelite = null;
                                    bitmapMapsattelite = bitmap;

                                }

                            });
                        }
                    });