I have a ViewPager2 which is a horizontal ImageView scroller which is autoscrolling enabled. This autoscrolling is implemented using Timer.schedule().
The issue that I am struggling to solve is I want this autoscroll to stop right there when the fragment containing that is no longer visible to the User, and once the User resumes this fragment, the ViewPager should start autoscrolling from the same position where it was left.
My code for ViewPager:
public class ChannelPagerViewHolder extends RecyclerView.ViewHolder {
private static final int LIMIT = 7;
private static final @ViewPager2.OffscreenPageLimit int OFFSCREEN_PAGE_LIMIT = 2;
private Context mContext;
private LifecycleOwner mLifecycleOwner;
private ViewPager2 viewPager;
private LiveData<List<ChannelItem>> mChannelItemList;
private BannerAdapter bannerAdapter;
private Handler mHandler;
private int currentPage;
private int prevPageNumber;
public ChannelPagerViewHolder(View view, Context context, LifecycleOwner lifecycleOwner, int placement) {
super(view);
Log.d("ChannelPagerViewHolder","");
mContext = context;
mLifecycleOwner = lifecycleOwner;
viewPager = view.findViewById(R.id.view_pager);
viewPager.setOffscreenPageLimit(OFFSCREEN_PAGE_LIMIT);
viewPager.getLayoutParams().width =
(int) (Resources.getSystem().getDisplayMetrics().widthPixels);
viewPager.getLayoutParams().height =
viewPager.getLayoutParams().width / 2;
bannerAdapter = new BannerAdapter(mContext, placement);
viewPager.setAdapter(bannerAdapter);
viewPager.setClipToPadding(false);
viewPager.setPadding(24,0,24,0);
// Hack to make left and right banner visible.
RecyclerView recyclerView = ((RecyclerView) viewPager.getChildAt(0));
recyclerView.setClipToPadding(false);
UserEventLogger.getInstance(context).addImpressionLogger(
recyclerView,
placement
);
mHandler = new Handler();
currentPage = 0;
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
currentPage = position;
prevPageNumber = currentPage;
}
});
new Timer().schedule(
new TimerTask() {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(currentPage++);
}
});
}
},
1000,
1000
);
}
}
UI of ViewPager: My ViewPager
Any help would be appreciated!!