【问题标题】:Google map touch on bottom sheet dialog谷歌地图触摸底部工作表对话框
【发布时间】:2021-08-08 03:15:46
【问题描述】:

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

【问题讨论】:

  • 你找到解决办法了吗?
  • 我只是为此使用了一个 DialogFragment。它工作正常

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


【解决方案1】:

尝试将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">

【讨论】:

    【解决方案2】:

    我有一个包含SupportMapFragment(子View)的BottomSheetDialogFragment(父View)。平移地图仅适用于水平手势。正如 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
                childView?.parent?.requestDisallowInterceptTouchEvent(true)
            }
            GoogleMap.OnCameraMoveStartedListener.REASON_API_ANIMATION -> {
                // The user tapped something on the map
                childView?.parent?.requestDisallowInterceptTouchEvent(true)
            }
            GoogleMap.OnCameraMoveStartedListener.REASON_DEVELOPER_ANIMATION -> {
                // The app moved the camera
                childView?.parent?.requestDisallowInterceptTouchEvent(true)
            }
        }
    }
    

    当设置为true时,requestDisallowInterceptTouchEvent()不允许父View拦截子View的触摸事件。我现在可以在底部工作表对话框片段中放大/缩小地图(水平和垂直手势)。

    【讨论】:

    • 什么是“视图”。总是提供完整的信息
    【解决方案3】:

    将谷歌地图的地图片段添加到LinearLayout,并将android:nestedScrollingEnabled="true"这一行添加到LinearLayout

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多