Giải pháp của tôi dựa trên benkc, nhưng hoạt ảnh cuộn trang đầu tiên và cuối cùng bị vô hiệu hóa và khi các trang "cuộn" đến trang thực, hoạt ảnh cuộn được bật lại, Đề án này có thể giải quyết nhược điểm đầu tiên.
nhưng kết quả ViewPager.setCurrentItem(position, false)
của tôi vẫn có hoạt ảnh cuộn, vì vậy tôi triển khai hoạt ảnh quá nhanh để xem.
sự di chuyển hình ảnh động nhanh như thế này, không quan tâm nhận xét, chỉ cần mã của tôi không sử dụng các phương pháp:
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);
}
}
và sử dụng phương pháp này để hoạt động ViewPager của
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();
}
}
và sửa đổi onPageScrollStateChanged như thế này, chỉ trang đầu tiên hoặc trang cuối cùng (tôi có 5 trang) sẽ thay đổi hoạt ảnh để cuộn nhanh, nếu không có cuộn bình thường:
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);
}
}
}
tài liệu tham khảo FixedSpeedScroller là ở đây: http://blog.csdn.net/ekeuy/article/details/12841409
việc kiểm tra này http://stackoverflow.com/q/7546224/1263908 – sique
http://stackoverflow.com/questions/7440012/infinite-viewpager – blessenm