sheet medium example bottomsheetdialogfragment bottom android bottom-sheet

medium - Android Bottom Sheet suave expansión, como Google Maps



bottomsheetdialogfragment example (1)

Puede lograr esto mediante la subclasificación de BottomSheetBehavior y anulando onTouchEvent para volver pronto en ACTION_UP y ACTION_CANCEL .

public class CustomBottomSheetBehavior<V extends View> extends BottomSheetBehavior<V> { public CustomBottomSheetBehavior() { super(); } public CustomBottomSheetBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { int action = event.getActionMasked(); switch (action) { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: return true; } return super.onTouchEvent(parent, child, event); } }

Esto evita que la clase BottomSheetBehavior maneje estos eventos y desencadene la llamada ''expandir'' o ''contraer''.

Para aplicar su CustomBottomSheetBehavior en xml: app:layout_behavior="com.yourpackage.CustomBottomSheetBehavior"

Para restaurar la funcionalidad predeterminada a BottomSheetBehavior cuando la hoja está totalmente expandida o contraída, puede agregar una marca que se establece cuando el desplazamiento de la diapositiva alcanza un cierto valor. En el siguiente ejemplo, los eventos ACTION_UP y ACTION_CANCEL hoja inferior solo se ignoran cuando el desplazamiento de la diapositiva está entre 0.1 y 0.9.

public class CustomBottomSheetBehavior<V extends View> extends BottomSheetBehavior<V> { private boolean isExpandedOrCollapsed; public CustomBottomSheetBehavior() { super(); listenForSlideEvents(); } public CustomBottomSheetBehavior(Context context, AttributeSet attrs) { super(context, attrs); listenForSlideEvents(); } void listenForSlideEvents() { setBottomSheetCallback(new BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { } @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { isExpandedOrCollapsed = slideOffset < 0.1f || slideOffset > 0.9f; } }); } @Override public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { if (!isExpandedOrCollapsed) { int action = event.getActionMasked(); switch (action) { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: return true; } } return super.onTouchEvent(parent, child, event); } }

Quiero recrear el comportamiento de la hoja inferior provisto en la aplicación Google Maps:

Enlace al comportamiento esperado.

He intentado usar BottomSheetBehavior y un par de otras BottomSheetBehavior de terceros como umano AndroidSlidingUpPanel, pero el problema que no pude evitar es que todos están colocando la Hoja de Fondo entre estados (colapsada y expandida).

Me gustaría tener una hoja inferior que se pueda expandir suavemente deslizando hacia arriba, sin que se ajuste al estado más cercano, sino que permanezca donde el usuario se detuvo con el deslizamiento.