Карта Google Touch в диалоговом окне нижнего листа

У меня есть фрагмент карты Google в верхней части диалогового окна нижнего листа. Я отключил перетаскиваемое сенсорное действие в поведении нижнего листа, чтобы я мог управлять картой. Проблема в том, что я не могу прокручивать карту, используя сенсорные действия вверх или вниз, потому что перетаскивание моего нижнего листа отключено. Я думал отключить сенсорное действие поведения нижнего листа, когда пользователь касается карты, но я не знаю, как это сделать. Как я могу это исправить?


person Dan Ponce    schedule 05.09.2016    source источник
comment
Вы нашли какое-нибудь решение?   -  person Andriy Antonov    schedule 18.03.2017
comment
Я просто использовал DialogFragment для этого. Он отлично работает   -  person Dan Ponce    schedule 20.03.2017


Ответы (2)


Попробуйте добавить 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">
person David Jarvis    schedule 29.11.2018

У меня есть BottomSheetDialogFragment (родительский View), который содержит SupportMapFragment (дочерний View). Панорамирование карты работает только для горизонтальных жестов. Как уже упоминалось 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
            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. Теперь я могу увеличивать/уменьшать масштаб карты (горизонтальные и вертикальные жесты) во фрагменте диалога нижнего листа.

person zeenosaur    schedule 12.12.2018
comment
что такое "вид". всегда давайте полную информацию - person Harkal; 07.07.2019