我的底部工作表对话框顶部有一个谷歌地图片段。我在底部工作表上禁用了可拖动的触摸操作,以便我可以控制地图。问题是我无法使用向上或向下触摸操作滚动地图,因为我的底部工作表可拖动禁用。我想在用户触摸地图时禁用底页行为的触摸动作,但我不知道该怎么做。我该如何解决这个问题?
答案 0 :(得分:0)
尝试将nestedScrollingEnabled="true"
添加到底部工作表布局:
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="true"
app:behavior_hideable="true"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
答案 1 :(得分:0)
我有一个BottomSheetDialogFragment
,其中包含SupportMapFragment
。平移地图仅适用于水平手势,正如OP所述,这是因为BottomSheet
和Map
的触摸事件冲突。
这就是我的处理方式。我的BottomSheetDialogFragment
实现了OnMapReadyCallback
和GoogleMap.OnCameraMoveStartedListener
。
override fun onMapReady(p0: GoogleMap) {
p0.setOnCameraMoveStartedListener(this)
}
override fun onCameraMoveStarted(reason: Int) {
when(reason) {
GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {
// The user gestured on the map
view?.parent?.requestDisallowInterceptTouchEvent(true)
}
GoogleMap.OnCameraMoveStartedListener.REASON_API_ANIMATION -> {
// The user tapped something on the map
view?.parent?.requestDisallowInterceptTouchEvent(true)
}
GoogleMap.OnCameraMoveStartedListener.REASON_DEVELOPER_ANIMATION -> {
// The app moved the camera
view?.parent?.requestDisallowInterceptTouchEvent(true)
}
}
}
设置为true
时,requestDisallowInterceptTouchEvent()
不允许父级View
拦截子级View
的触摸事件。现在,我可以在底部的对话框片段中放大/缩小地图。
答案 2 :(得分:-1)
将 Google Maps 地图片段添加到 LinearLayout
并将 android:nestedScrollingEnabled="true"
这一行添加到 LinearLayout
。