Ich verwende VerticalViewPager und zwei Fragmente darin.Scroll-Verhalten bei RecyclerView in vertikale Ansicht Pager
Eines dieser Fragment enthält RecyclerView mit nur regulären vertikalen Liste. Das Problem ist, dass ich diese Liste zu beenden brauchen und dann Seite bei Ansicht Pager ändern und jetzt Pager immer versuchen, RecyclerView Scroll abzufangen versuchen.
Meine VerticalViewPager Klasse:
public class VerticalViewPager extends ViewPager {
public VerticalViewPager(Context context) {
super(context);
init();
}
public VerticalViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setPageTransformer(true, new VerticalPageTransformer());
setOverScrollMode(OVER_SCROLL_NEVER);
requestDisallowInterceptTouchEvent(false);
}
private class VerticalPageTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View view, float position) {
if (position < -1) {
view.setAlpha(0);
} else if (position <= 1) {
view.setAlpha(1);
view.setTranslationX(view.getWidth() * -position);
float yPosition = position * view.getHeight();
view.setTranslationY(yPosition);
} else {
view.setAlpha(0);
}
}
}
private MotionEvent swapXY(MotionEvent ev) {
float width = getWidth();
float height = getHeight();
float newX = (ev.getY()/height) * width;
float newY = (ev.getX()/width) * height;
ev.setLocation(newX, newY);
return ev;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
swapXY(ev);
return intercepted;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return super.onTouchEvent(swapXY(ev));
}
}
Und mein Layout Baum:
- -Fragment
- --ViewPager
- --- Fragment_A
- ---- RecyclerView
- --- Fragment_B
Ich habe bereits versucht, verschiedene Kombinationen von
.setNestedScrollingEnabled(false/true);
.requestDisallowInterceptTouchEvent(false/true);
Versuchte RecyclerView mit NestedScrollView zu wickeln, aber Schnecke ist nach wie vor chaotisch und laggy, ViewPager seine Seite zu Beginn Liste ändern oder in der Mitte.
Danke für Ihre Hilfe!