Android auto scroll loop viewpager
maven
<dependency>
<groupId>com.bobomee.android</groupId>
<artifactId>scrollloopviewpager</artifactId>
<version>2.1</version>
<type>aar</type>
</dependency>
gradle
compile 'com.bobomee.android:scrollloopviewpager:2.1'
- Simple
private void initViewPager(View view) {
ViewPager viewPager = ViewFindUtils.find(view, R.id.viewpager);
viewPager.setAdapter(new FragmentStateAdapter(getChildFragmentManager()));
final BannerController bannerController = new BannerController(getActivity());
bannerController.viewPager(viewPager);
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent event) {
bannerController.dispatchTouchEvent(event);
return false;
}
});
bannerController.startAutoScroll();
}
final BannerConfig bannerConfig = BannerConfig.sConfig(getContext())
.autoScrollFactor(0.8f)
.swipeScrollFactor(1.2f)
.interval(800);
final BannerController bannerController = new BannerController(bannerConfig);
bannerController.viewPager(viewPager);
final BannerController lBannerController = new BannerScroll(lBannerConfig);//use custom config
lBannerController.viewPager(lViewPager); // attach viewpager
lViewPager.setOnTouchListener(new View.OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent event) {
lBannerController.dispatchTouchEvent(event);// dispatchTouchEvent,stop scroll when touch
return false;
}
});
- Advance
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override public void onPageSelected(int position) {
super.onPageSelected(position);
if (bannerController.isFirst() || bannerController.isLast()) {
bannerController.toggleDirection();
}
}
});
However, you can also customize Viewpager
public class InfiniteBanner extends LoopViewPager {
private BannerScroll mBannerScroll;
public InfiniteBanner(Context context) {
super(context);
init();
}
public InfiniteBanner(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mBannerScroll = new BannerScroll(getContext());
mBannerScroll.viewPager(this);
mBannerScroll.startAutoScroll();
}
@Override public boolean dispatchTouchEvent(MotionEvent ev) {
mBannerScroll.dispatchTouchEvent(ev);
return super.dispatchTouchEvent(ev);
}
@Override protected void onDetachedFromWindow() {
mBannerScroll.onDetachedFromWindow();
super.onDetachedFromWindow();
}
}
ViewPager viewPager = ViewFindUtils.find(view, viewpager);
FragmentStateAdapter fragmentStateAdapter = new FragmentStateAdapter(fragmentManager);
viewPager.setAdapter(fragmentStateAdapter);
- see more: FiniteBanner
interval(long)
set auto scroll time in milliseconds, default isDEFAULT_INTERVAL
.direction(int)
set auto scroll direction, default isRIGHT
.autoScrollFactor(double)
set the factor by which the duration of sliding animation will change.stopScrollWhenTouch(boolean)
set whether stop auto scroll when touching, default is true.- You may need JakeWharton/ViewPagerIndicator to implement indicator.
- Also you can see DrawableIndicator