Mi solución se basa en benkc, pero la primera y la última animación de desplazamiento de página están desactivadas, y cuando las páginas "se desplazan" a la página real, la animación de desplazamiento se habilita de nuevo, este esquema puede resolver el primer inconveniente.
pero mi resultado ViewPager.setCurrentItem(position, false)
sigue teniendo animación de desplazamiento, por lo que implemento una animación demasiado rápida.
la animación desplazamiento rápido como este, no me importa el comentario sólo mi código no usaron estos métodos:
public class FixedSpeedScroller extends Scroller {
private int mDuration = 0;
public FixedSpeedScroller(Context context) {
super(context);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
}
y utilizar este método para la actividad de ViewPager
private Scroller scroller;
private void setViewPagerScroll(boolean instant) {
try {
Field mScroller = null;
mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
if (scroller == null) {
scroller = (Scroller) mScroller.get(mViewPager);
}
FixedSpeedScroller fss = new FixedSpeedScroller(mViewPager.getContext());
mScroller.set(mViewPager, instant ? fss : scroller);
} catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
y modifique onPageScrollStateChanged como este, solo la primera página o la última página (tengo 5 páginas) cambiaría la animación a desplazamiento rápido, de lo contrario tiene un desplazamiento normal:
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
if (position == 0) {
setViewPagerScroll(true);
mViewPager.setCurrentItem(3);
} else if (position == 4) {
setViewPagerScroll(true);
mViewPager.setCurrentItem(1);
} else {
setViewPagerScroll(false);
}
}
}
referencias FixedSpeedScroller está aquí: http://blog.csdn.net/ekeuy/article/details/12841409
cheque esta http://stackoverflow.com/q/7546224/1263908 – sique
http://stackoverflow.com/questions/7440012/infinite-viewpager – blessenm