Próbuję zsynchronizować dwa ViewPager
s, jak najwyraźniej mają sporo ludzi przede mną, a ja mam tak daleko, jak to:Synchronizacja dwa ViewPagers wykorzystujące OnPageChangeListener
private ViewPager mNavPager;
private ViewPager mMainPager;
private final OnPageChangeListener mNavPagerListener = new OnPageChangeListener() {
private boolean mNavDragging;
private int mScrollPosition;
@Override
public void onPageSelected(int position) {
mScrollPosition = position;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(mNavDragging)
mMainPager.scrollTo(positionOffsetPixels, 0);
}
@Override
public void onPageScrollStateChanged(int state) {
switch(state) {
case ViewPager.SCROLL_STATE_DRAGGING:
case ViewPager.SCROLL_STATE_SETTLING:
mNavDragging = true;
break;
case ViewPager.SCROLL_STATE_IDLE:
mNavDragging = false;
break;
}
}
};
private OnPageChangeListener mMainPagerListener = new OnPageChangeListener() {
private boolean mMainDragging;
private int mScrollPosition;
@Override
public void onPageSelected(int position) {
mScrollPosition = position;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(mMainDragging)
mNavPager.scrollTo(positionOffsetPixels, 0);
}
@Override
public void onPageScrollStateChanged(int state) {
switch(state) {
case ViewPager.SCROLL_STATE_DRAGGING:
case ViewPager.SCROLL_STATE_SETTLING:
mMainDragging = true;
break;
case ViewPager.SCROLL_STATE_IDLE:
mMainDragging = false;
break;
}
}
};
Jeśli któraś z nich jest przewijany ręcznie, drugi jest podporządkowany mu przy użyciu właściwości stanu przewijania. Działa pięknie, dopóki przedmioty nie osiągną ostatecznego położenia; w tym momencie niewolny pager błyskawicznie wraca do poprzednio wybranego elementu, tak jakby przewijanie nie miało miejsca.
Próbowałem wywoływać ViewPager#setCurrentItem(mScrolledPosition)
z wieloma różnymi ograniczeniami logicznymi, ale to też nie działa, chociaż czasami pogarsza to. Czuję, że musi być coś, co można z tym zrobić, ale nie jestem pewien co.
Jak mogę ustawić, aby podrzędny pager pozostał we właściwej pozycji?
skończyłaś pisać je bardziej szczegółowo? –