SlidingUpPanelLayout und ScrollView
Ich habe einSlidingUpPanelLayout Das enthält ein Bild als Draufsicht und einen Ansichts-Pager, der verschoben werden muss. Dasviewpager
hat 3 Fragmente und zwei davon sind Listenansichten. Ich möchte also in der Lage sein, den Ansichts-Pager beim Hochziehen zu erweitern, und wenn der Ansichts-Pager hochgefahren ist, möchte ich in der Lage sein, den Bildlauf durchzuführenscrollviews
in den Fragmenten. Aber beim runterziehen auf diescrollview
falls es nicht mehr zum scrollen gibt, möchte ich das einklappen lassenviewpager
. Also bitte vorschlagen, wie man das machtSlidingUpPanelLayout
beim Ziehen der Scrollansicht minimieren, falls kein Inhalt mehr zum Scrollen vorhanden ist?
Hier poste ich einen Teil meines Codes: Ich habe versucht, die Berührungsereignisse zu erfassen und das SlidingUpPanel zu überschreibenonInterceptTouchEvent
funktionieren wie folgt:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (isHandled) {
Log.i("interceptToch", "HEREEE");
return onTouchEvent(ev);
}
return false;
}
Also, wenn das SlidingUpPanelLayout erweitert wird, setze ichisHandled = false
. Wenn das slideUpPanelLayout erweitert wird, werden alle Berührungsereignisse an seine untergeordneten Ansichten übergeben.
Und ich habe auch gesagtonTouchEvent
in demscrollView
, um die zu entsperrenSlidingUpPanelLayout.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;
}
Das funktioniert aber nicht. Das Problem ist, dass einmal diescrollview.onTouch
Veranstaltung ist inMotionEvent.ACTION_MOVE
SlidingUpPanelLayout.onInterceptTouchEvent
wird nicht gerufen.SlidingUpPanelLayout.onInterceptTouchEvent
heißt nachMotionEvent.ACTION_CANCEL
. Dies bedeutet, dass das Ereignis nicht an das SlidingUpPanelLayout übergeben werden kann und das Bedienfeld nicht ausgeblendet werden kann.