我在SDK4.03,Samsung Infuse Android2.2,Support Library for Android4上编译,并在我的应用程序中使用ViewPager,实际滑动工作正常,但当我这样做时
viewPager.setCurrentItem(id); // , or
viewPager.setCurrentItem(id, true); 它不会平滑滚动,但会立即切换视图。尽管文档清楚地说明了这就是将第二个参数设置为true的目的。这是怎么回事?
发布于 2013-03-21 22:07:41
我已经通过创建一个使用反射覆盖ViewPager.mScroller的MyViewPager修复了这个问题。
public class MyViewPager extends ViewPager {
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setMyScroller();
}
private void setMyScroller() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
scroller.set(this, new MyScroller(getContext()));
} catch (Exception e) {
e.printStackTrace();
}
}
public class MyScroller extends Scroller {
public MyScroller(Context context) {
super(context, new DecelerateInterpolator());
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, 1000 /*1 secs*/);
}
}
}发布于 2013-02-08 23:45:42
这就是我所做的。我通过将自己的自定义子类放在同一个包中,覆盖了ViewPager中的包私有方法smoothScrollTo。传递给它的值为零,这会导致捕捉行为,而不是平滑滚动。
package android.support.v4.view;
import android.content.Context;
import android.util.AttributeSet;
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attr) {
super(context, attr);
}
void smoothScrollTo(int x, int y, int velocity) {
super.smoothScrollTo(x, y, 1);
}
}它工作得很好,如果你愿意,你可以计算并提供仅为1的实际速度ISO。
发布于 2015-11-02 17:06:28
我在一个处理程序中调用了setCurrentItem函数,它对我来说工作得很好。
new Handler().post(new Runnable() {
@Override
public void run() {
myViewPager.setCurrentItem(1, true);
}
});希望这能有所帮助。
https://stackoverflow.com/questions/11962268
复制相似问题