谷歌地图触摸底部工作表对话框

时间:2016-09-05 12:09:40

标签: android android-fragments google-maps-android-api-2 bottom-sheet

我的底部工作表对话框顶部有一个谷歌地图片段。我在底部工作表上禁用了可拖动的触摸操作,以便我可以控制地图。问题是我无法使用向上或向下触摸操作滚动地图,因为我的底部工作表可拖动禁用。我想在用户触摸地图时禁用底页行为的触摸动作,但我不知道该怎么做。我该如何解决这个问题?

3 个答案:

答案 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所述,这是因为BottomSheetMap的触摸事件冲突。

这就是我的处理方式。我的BottomSheetDialogFragment实现了OnMapReadyCallbackGoogleMap.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