今天要介紹的是 Maps SDK for Android Utility 的最後一個部分--LayerManager。
Utility 內有幾個 Manager
結尾的類別,主要是為了協助開發者管理不同類型的點擊事件,因為實務上,App 內的地圖可能會同時加入許多不同種類的圖層。
以下的步驟會是說明在多圖層的情況下,如何使用這些 Manager 們協助管理圖層。
在設定圖層前先將會使用的 Manager
們實例化。
val markerManager = MarkerManager(map)
val groundOverlayManager = GroundOverlayManager(map!!)
val polygonManager = PolygonManager(map)
val polylineManager = PolylineManager(map)
val clusterManager =
ClusterManager<StoreClusterItem>(context, map, markerManager)
val geoJsonLineLayer = GeoJsonLayer(
map,
R.raw.geojson_file,
context,
markerManager,
polygonManager,
polylineManager,
groundOverlayManager
)
val kmlPolylineLayer = KmlLayer(
map,
R.raw.kml_file,
context,
markerManager,
polygonManager,
polylineManager,
groundOverlayManager,
null
)
xxxManager.newCollection()
新增個別的地圖項目當我們需要新增其他的 Marker 或 Polygon 等物件到地圖上時,有別於前面幾天學到的,直接將物件新增至地圖上,官方建議可以使用以下的方式新增。
以 Marker 來說,應該要透過 MarkerManager.newCollection()
建立一個新的 Collection
再加入 Marker
。
val markerCollection =
markerManager.newCollection()
markerCollection.addMarker(
MarkerOptions()
.position(LatLng(51.150000, -0.150032))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.title("Unclustered marker")
)
也可以傳入字串作為唯一碼,之後可以從 Manager
身上拿到相同的 Collection
// 建立新的 Collection
MarkerManager.newCollection("THE_VERY_UNIQUE_ID")
// 取得以該 ID 建立的 Collection
MarkerManager.getCollection("THE_VERY_UNIQUE_ID")
這是原本 KML 圖層的點擊事件
kmlPolylineLayer.addLayerToMap()
kmlPolylineLayer.setOnFeatureClickListener { feature: Feature ->
// 處理事件點擊
}
新加入的其他 Marker 或 Polygon 類的圖形,可以針對該 Collection
設定點擊事件,例如:
markerCollection.setOnMarkerClickListener { marker: Marker ->
Toast.makeText(
context,
"Marker clicked: ${marker.title}",
Toast.LENGTH_SHORT
).show()
false
}
一開始看官方文件的時候,實在是有點看不太懂,但反覆翻了一下 Source code 之後,就大概能夠理解這些類別存在的目的。其實就是為了讓多圖層狀態下處理各圖層事件時,可以更有效的管理與分類。
今天礙於賽程時間的限制,只有照著文件做一些簡單的介紹,也許鐵人賽結束後,有時間可以再多寫幾個測試專案,比較使用 Manager 前後的差異。
以上就是今天的內容,寫得不好的地方還請各位大大包涵,如果可以非常歡迎留言討論或指教,謝謝大家。
明天見囉~