SlidingUpPanelLayout y ScrollView
tengo unSlidingUpPanelLayout que contiene una imagen como vista superior y un localizador de vistas que debe deslizarse. losviewpager
tiene 3 fragmentos y dos de ellos son vistas de lista. Por lo tanto, quiero poder expandir el localizador de vistas al levantarlo, y una vez que el localizador de vistas esté activo, quiero poder desplazar elscrollviews
dentro de los fragmentos Pero al tirar hacia abajoscrollview
en caso de que no haya más para desplazarse, quiero comenzar a contraer elviewpager
. Así que por favor sugiera cómo hacer elSlidingUpPanelLayout
colapsar al tirar de la vista de desplazamiento en caso de que no haya más contenido para desplazarse?
Aquí publico algunos de mis códigos: he intentado capturar los eventos táctiles y sobrescribir el SlidingUpPanelonInterceptTouchEvent
funcionar de la siguiente manera:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (isHandled) {
Log.i("interceptToch", "HEREEE");
return onTouchEvent(ev);
}
return false;
}
Entonces, cuando SlidingUpPanelLayout se expande, configuroisHandled = false
. Entonces, cuando el slideUpPanelLayout se expande, todos los eventos táctiles se pasan a sus vistas secundarias.
Y también pongoonTouchEvent
en elscrollView
, para desbloquear elSlidingUpPanelLayout.onInterceptTouchEvent
:
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
scroll = 0;
y = event.getY();
} else if (action == MotionEvent.ACTION_MOVE) {
if (scroll_view_summary.getScrollY() == 0 && event.getY() > y) {
scroll = scroll + 1;
if (scroll > 2) {
// the user has pulled the list and the slidingUpPanelLauout
// should be able to handle the toch events again
SlidingUpPanelLayoutCustom las =
((SaleDetailsActivity) getActivity()).getLayout();
las.setHandle(true);
scroll = 0;
return false;
}
}
}
return false;
}
Pero esto no está funcionando. El problema es que una vez que elscrollview.onTouch
el evento está enMotionEvent.ACTION_MOVE
SlidingUpPanelLayout.onInterceptTouchEvent
No se llama.SlidingUpPanelLayout.onInterceptTouchEvent
se llama despuésMotionEvent.ACTION_CANCEL
. Esto significa que el evento no puede pasarse a SlidingUpPanelLayout y el panel no puede colapsar.