为什么我们必须使用GoogleMap.snapshot()来捕获地图的快照?

时间:2016-01-20 19:29:15

标签: android google-maps-android-api-2 android-view android-mapview

Google Maps API的第二版公开了一种snapshot方法,用于获取GoogleMap个对象在我们的用户界面中显示的位图表示。

这个方法肯定是必需的:例如,如果我尝试手动创建整个应用程序UI的位图表示,如下所示:

View view = activity.getWindow().getDecorView().getRootView();

Bitmap bitmap = Bitmap.createBitmap(
        view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);
view.draw(canvas);

未捕获地图(bitmap中的相应像素均为黑色)。

但是,如果我在MapView布局中包含Activity,然后使用Stetho在运行时检查视图层次结构,则至少会显示部分MapView (可能是叠加层)使用“常规”View的内部层次结构呈现,例如RelativeLayoutLinearLayoutImageView等:

A textual representation of an example app view hierarchy inspected at runtime

我的问题是: MapView有什么不同?为什么绘制到Canvas根本不捕捉地图的任何部分(甚至不是用于渲染部分地图的“常规”视图)

作为参考,我上面给出的实现可以成功捕获SurfaceView内容,以及所有其他“常规”视图。

1 个答案:

答案 0 :(得分:1)

如果我不得不猜测,那就是地图SurfaceView上的using setSecure()