0
第2版Google Maps API展示了一個snapshot
方法,用於在我們的用戶界面中顯示GoogleMap
對象時獲取位圖表示。爲什麼我們必須使用GoogleMap.snapshot()來捕獲地圖的快照?
此方法是絕對所需:例如,如果我嘗試手動創建我的整個應用程序的用戶界面的位圖表示,如下所示:
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
的對應像素都是黑色的)。
不過,如果我包括我的Activity
佈局MapView
,然後檢查在使用Stetho運行視圖層次,看來該MapView
(可能覆蓋)的至少一部分是使用的內部分層渲染的「常規」 View
S,像RelativeLayout
,LinearLayout
,ImageView
等:
我的問題是:什麼是關於MapView
不同?爲什麼繪製到Canvas
根本不捕獲任何地圖的任何部分(甚至不是用於呈現其部分的「常規」視圖)?
僅供參考,我上面給出的實現可以成功捕獲SurfaceView
內容以及所有其他「常規」視圖。
啊,有趣。我熟悉在'Window'上設置'FLAG_SECURE',它不會使用原始問題中的方法阻止「截圖捕獲」。這似乎旨在防止使用硬件按鈕進行截圖,並防止敏感信息出現在最近的任務預覽中。這應該很容易測試;我會試一試並回報。 順便說一句,你如何推斷出地圖是使用'SurfaceView'呈現的?我應該期望在上面的層次結構中看到一個「SurfaceView」嗎? MapView類直接擴展了FrameLayout。 – stkent
@stkent:「我希望在上面的層次結構中看到SurfaceView嗎?」 - 不,他們將其分類。我試圖弄清楚如何在'ViewPager'中繪製地圖,在地圖上橫向滑動地圖,而不是'ViewPager'。這需要在尋呼機中重寫'canScroll()',並確定觸摸事件是否在地圖上。該地圖響應(或至少用於響應)'instanceof SurfaceView'。見https://github.com/commonsguy/cw-omnibus/blob/master/MapsV2/Pager/app/src/main/java/com/commonsware/android/mapsv2/pager/MapAwarePager.java – CommonsWare
嗯,如果我嘗試現在使用相同的檢查(Play Services的v8.4.0)我得到'Inconvertible types'錯誤。 – stkent