【Android 入門開發實戰:口罩地圖】Google Map 結合口罩資料
【Android 入門開發實戰:口罩地圖】線上免費講義課程目錄
在 MapActivity 加入之前下載口罩資料的方法 getPharmacyData,可以參考該專案的 MainActivity。
下載口罩資料
private fun getPharmacyData() {
//顯示忙碌圈圈
progressBar.visibility = View.VISIBLE
OkHttpUtil.mOkHttpUtil.getAsync(PHARMACIES_DATA_URL, object : OkHttpUtil.ICallback {
override fun onResponse(response: Response) {
val pharmaciesData = response.body?.string()
Log.d("QQQ", "pharmaciesData:$pharmaciesData")
pharmacyInfo = Gson().fromJson(pharmaciesData, PharmacyInfo::class.java)
runOnUiThread {
//關閉忙碌圈圈
progressBar.visibility = View.GONE
addAllMaker()
}
}
override fun onFailure(e: okio.IOException) {
Log.d("HKT", "onFailure: $e")
//關閉忙碌圈圈
progressBar.visibility = View.GONE
}
})
}
加入所有口罩資料標記
private fun addAllMaker() {
pharmacyInfo?.features?.forEach { feature ->
val pinMarker = googleMap?.addMarker(
MarkerOptions()
.position(
LatLng(
feature.geometry.coordinates[1],
feature.geometry.coordinates[0],
)
)
.title(feature.property.name)
.snippet(
"${feature.property.mask_adult}," +
"${feature.property.mask_child}"
)
)
}
}
將所有口罩資料,加入地圖標記,移動畫面過程中,會有很明顯會出現效能使用上的問題,實際上只要載入螢幕畫面範圍的口罩資料即可,螢幕畫面外的口罩資料可以清除。
實作 OnInfoWindowClickListener
class MapActivity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnInfoWindowClickListener {
}
設定資訊視窗、資訊視窗點擊監聽
override fun onMapReady(googleMap: GoogleMap) {
this.googleMap = googleMap
googleMap.moveCamera(
CameraUpdateFactory.newLatLngZoom(
defaultLocation, 15f
)
)
googleMap?.setInfoWindowAdapter(MyInfoWindowAdapter(mContext))
googleMap?.setOnInfoWindowClickListener(this)
// getLocationPermission()
}
資訊視窗點擊事件
資訊視窗,點擊後跳轉到詳細資訊頁
override fun onInfoWindowClick(marker: Marker?) {
marker?.title?.let { title ->
// Log.d("HKT", title)
val filterData =
pharmacyInfo?.features?.filter {
it.property.name == (title)
}
if (filterData?.size!! > 0) {
val intent = Intent(this, PharmacyDetailActivity::class.java)
intent.putExtra("data", filterData.first())
startActivity(intent)
} else {
Log.d("HKT", "查無資料")
}
}
}
輸出結果
程式碼範例
範例名稱:Google Map 結合口罩資料
開發人員:HKT (侯光燦)
程式語言:Kotlin
開發環境:Android Studio 4.1.2 & Android 11 & Kotlin 1.4.30
授權範圍:使用時必須註明出處且不得為商業目的之使用
範例下載點:點我下載