在底部对话框打开前暂时禁用MapView的滚动功能。
示例代码:
class MainActivity : AppCompatActivity() {
private var isBottomSheetOpen = false
private lateinit var mapView: MapView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mapView = findViewById(R.id.map_view)
val mapFragment = supportFragmentManager.findFragmentById(R.id.map_fragment) as? SupportMapFragment
mapFragment?.getMapAsync { googleMap ->
// 地图滚动监听
googleMap.setOnCameraMoveListener {
// 如果底部对话框处于展开状态,则禁用地图滚动功能
if (isBottomSheetOpen) {
mapView.setScrollContainer(false)
}
}
// 底部对话框状态监听
val bottomSheet = findViewById>(R.id.bottom_sheet)
bottomSheet.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
override fun onSlide(bottomSheet: View, slideOffset: Float) {
// do nothing
}
override fun onStateChanged(bottomSheet: View, newState: Int) {
// 当底部对话框展开时,设置isBottomSheetOpen为true
isBottomSheetOpen = newState == BottomSheetBehavior.STATE_EXPANDED
// 如果地图当前处于展开状态,则禁用地图滚动功能
if (isBottomSheetOpen) {
mapView.setScrollContainer(false)
} else {
mapView.setScrollContainer(true)
}
}
})
}
}
}
在上述代码中,我们通过监听底部对话框的展开状态,控制isBottomSheetOpen的取值,并在地图滚动事件发生时,如果底部对话框处于展开状态,则禁用地图的滚动功能。