當初開賽時沒想到賽程會剛好跨到中秋連假,假期中趕稿真的有點難切割時間出來XD
今天要看的 GroundOverlay (區域疊加層),其實就是固定在地圖上的一張圖片。實作的方法也很簡單。
實作的邏輯是:
GroundOverlayOptions()
設定圖片、經緯度等資訊GoogleMap.addGroundOverlay()
將圖片繪製到地圖上,同時取得 GroundOverlay
物件可以做其他操作。要在地圖上建立 GroundOverlay
最重要的兩點是圖片跟位置的經緯度。
圖片讀入的方式跟之前介紹 Marker
的自定義 Icon
一樣,是使用 BitmapDiscriptorFactory
建立 BitmapDiscriptor
物件傳入。所以不論是 Resource
資料夾或是手機本地都可以是圖片的來源位置。
GroundOverlay
的位置設定,有以下三種方法。
GroundOverlayOptions().position(LatLng location, float width, float height)
GroundOverlayOptions().position(LatLng location, float width)
LatLngBounds
設定圖片的東北角與西南角GroundOverlayOptions().positionFromBounds(LatLngBounds bounds)
如果設定的邊界跟原始圖片的比例不同,圖片會被扭曲。
anchor()
如果是以單點設定圖片位置,系統預設是以圖片中心作為錨定點。要改變錨定的位置,可以呼叫以下方法更新。
// 圖片錨定在左下角
GroundOverlayOptions().anchor(0f, 1f)
bearing()
圖片在地圖上預設為朝北,如果使用者旋轉地圖,圖片會跟著一起旋轉。
如果要將圖片設定不同的朝向,可以使用 bearing()
設定度數,並以順時針方向旋轉。
GroundOverlayOptions().bearing(90f)
以下是一個簡單的範例
private fun addSimpleGroundOverlay(map: GoogleMap) {
val centralPark = LatLng(24.1858, 120.6533)
val groundOverlayOptions = GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromResource(R.drawable.img_alex_dudar))
// 設定圖片位置
.position(centralPark, 200f)
// 順時針旋轉 90 度
.bearing(90f)
// 錨定點設在圖片的左下角
.anchor(0f, 1f)
val groundOverlay = map.addGroundOverlay(groundOverlayOptions)
}
範例使用的照片是 Unsplash 上的圖。
相較於前面線段與多邊形,區域疊加層 (GroundOverlay) 可改變的參數不多。
透明度的設定可透過以下方法,輸入 0 ~ 1 之間的浮點數,1 為全透明 0 為不透明。
// 設定透明度
GroundOverlayOptions().transparency(0.5f)
GroundOverlay
如果要更新已經繪製到地圖上的 GroundOverlay
,需要在 GoogleMap.addGroundOverlay()
時取得 GroundOverlay
物件。
GroundOverlay.setImage(BitmapDescriptor)
跟設定圖片一樣,傳入 BitmapDescriptor
物件更新圖片。
不過要注意的是,傳入的圖片尺寸大小必須與原圖相同。
除了更換圖片外,圖片的經緯度位置、方向 (Bearing)、點擊行為,都可以做調整。
GroundOverlay.setPosition(LatLng)
: 設定位置GroundOverlay.setBearing(Float)
: 方向GroundOverlay.setClickable(Boolean)
: 可否點擊跟多邊形、線段等繪製物件一樣,使用 remove()
移除地圖上繪製的 GroundOverlay
。
GroundOverlay.remove()
點擊事件使用 OnGroundOverlayClickListener 處理監聽回呼,並使用 GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener)
設定監聽。
但 GroundOverlay
本身要記得啟用點擊行為,否則是不會有效果的。
以上就是 GroundOverlay
區域疊加層的介紹。不論是繪製還是外觀的調整,跟前幾天介紹的線段或多邊形相比都簡單許多,操作上有問題可以看一下文件或是留言討論~
謝謝您的耐心閱讀,我們就一樣明天見啦~