J'ai commencé par le code de HighFlyer qui a effectivement modifié le champ mScroller (ce qui est un bon début) mais n'a pas permis d'étendre la durée du défilement car ViewPager transmet explicitement la durée au mScroller lors de la demande de défilement.
L'extension du ViewPager n'a pas fonctionné car la méthode importante (smoothScrollTo) ne peut pas être surchargée.
J'ai fini par résoudre ce problème en étendant Scroller avec ce code :
public class FixedSpeedScroller extends Scroller {
private int mDuration = 5000;
public FixedSpeedScroller(Context context) {
super(context);
}
public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
}
Et l'utiliser comme ça :
try {
Field mScroller;
mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
FixedSpeedScroller scroller = new FixedSpeedScroller(mPager.getContext(), sInterpolator);
// scroller.setFixedDuration(5000);
mScroller.set(mPager, scroller);
} catch (NoSuchFieldException e) {
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
J'ai codé en dur la durée à 5 secondes et j'ai fait en sorte que mon ViewPager l'utilise.
J'espère que cela vous aidera.
0 votes
Essayez ceci antoniocappiello.com/2015/10/31/
1 votes
child.setNestedScrollingEnabled(false);
a fonctionné pour moi