viewpager in android :
Layout manager that allows the user to flip left and right through pages of data. You supply an implementation of a PagerAdapter to generate the pages that the view shows. ViewPager is most often used in conjunction with android :
<androidx.viewpager.widget.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="270dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/relativeLayout" />
Step -2: Activity Main.java Code:
private int slidercurrentPage;
private Timer timer;
final private long DELAY_TIME = 3000;
final private long PERIOD_TIME = 3000;stickyViewPager = findViewById(R.id.pager);Call the setBannerSliderViewPager() ,Call The method from inside On Create()
@SuppressLint("ClickableViewAccessibility")
private void setBannerSliderViewPager(final List<BlogPostModel> sliderModelList) {
slidercurrentPage = 0;
if (timer != null) {
timer.cancel();
}
stickyPosttList = new ArrayList<>();
stickyPotListt = new ArrayList<>();
for (int x = 0; x < sliderModelList.size(); x++) {
stickyPosttList.add(x, sliderModelList.get(x));
stickyPotListt.add(x, sliderModelList.get(x));
}
stickyPosttList.add(0, sliderModelList.get(sliderModelList.size() - 2));
stickyPosttList.add(1, sliderModelList.get(sliderModelList.size() - 1));
stickyPosttList.add(sliderModelList.get(0));
stickyPosttList.add(sliderModelList.get(1));
BlogHomeStickyBlogAdapter sliderAdapter = new BlogHomeStickyBlogAdapter(currentActivity, stickyPosttList);
stickyViewPager.setAdapter(sliderAdapter);
stickyViewPager.setClipToPadding(false);
stickyViewPager.setPageMargin(20);
stickyViewPager.setCurrentItem(slidercurrentPage);
ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
slidercurrentPage = i;
}
@Override
public void onPageScrollStateChanged(int i) {
if (i == ViewPager.SCROLL_STATE_IDLE) {
pageLooper(stickyPosttList);
}
}
};
stickyViewPager.addOnPageChangeListener(onPageChangeListener);
startBannerSlideShow(stickyPosttList);
stickyViewPager.setOnTouchListener(new View.OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
pageLooper(stickyPosttList);
stopBannerSlideShow();
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
startBannerSlideShow(stickyPosttList);
}
return false;
}
});
}
private void pageLooper(List<BlogPostModel> sliderModelList) {
if (slidercurrentPage == sliderModelList.size() - 2) {
slidercurrentPage = 2;
stickyViewPager.setCurrentItem(slidercurrentPage, false);
}
if (slidercurrentPage == 1) {
slidercurrentPage = sliderModelList.size() - 3;
stickyViewPager.setCurrentItem(slidercurrentPage, false);
}
}
private void startBannerSlideShow(final List<BlogPostModel> sliderModelList) {
final Handler handler = new Handler();
final Runnable update = new Runnable() {
@Override
public void run() {
if (slidercurrentPage >= sliderModelList.size()) {
slidercurrentPage = 0;
}
try {
stickyViewPager.setCurrentItem(slidercurrentPage++, true);
}catch (Exception e){
e.printStackTrace();
}
}
};
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.post(update);
}
}, DELAY_TIME, PERIOD_TIME);
}
private void stopBannerSlideShow() {
timer.cancel();
}Step-3 : ViewPager Adapter :
public class BlogHomeStickyBlogAdapter extends PagerAdapter implements LoopingPagerAdapter {Step-4 Layout for Adapter :
private List<BlogPostModel> blogPostModelList;
private LayoutInflater inflater;
private Context context;
public BlogHomeStickyBlogAdapter(Context context, List<BlogPostModel> blogPostModelList) {
this.context = context;
this.blogPostModelList = blogPostModelList;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return blogPostModelList.size();
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View sliderLayout = inflater.inflate(R.layout.sticky_blog_item_layout,null);
final CardView cardView =sliderLayout.findViewById(R.id.card);
final TextView BlogTitle=sliderLayout.findViewById(R.id.BlogTitle);
final TextView BlogShortDescription=sliderLayout.findViewById(R.id.BlogShortDescription);
final TextView BlogAuthor=sliderLayout.findViewById(R.id.BlogAuthor);
final TextView BlogDate=sliderLayout.findViewById(R.id.BlogDate);
final ImageView BlogImage = sliderLayout.findViewById(R.id.BlogImage);
final ImageView blogProfileImage = sliderLayout.findViewById(R.id.blogProfileImage);
BlogTitle.setText(blogPostModelList.get(position).getBlogTitle());
BlogShortDescription.setText(blogPostModelList.get(position).getBlogShortDescription());
BlogAuthor.setText(blogPostModelList.get(position).getBlogAuthor());
BlogDate.setText(blogPostModelList.get(position).getBlogDate());
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String str = blogPostModelList.get(position).getSlugURL().toString();
Intent intent=new Intent(view.getContext(), BlogDetailsViewActivity.class);
intent.putExtra("SlugURL",str);
view.getContext().startActivity(intent);
}
});
view.addView(sliderLayout);
return sliderLayout;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public int getRealCount() {
return blogPostModelList.size();
}
}<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:padding="10dp"
android:id="@+id/card"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="150dp"
android:scaleType="fitXY"
android:id="@+id/BlogImage"
android:src="@drawable/twitter">
</ImageView>
<TextView
android:layout_margin="5dp"
android:textSize="15sp"
android:textColor="@color/black"
android:layout_width="match_parent"
android:maxLines="2"
android:layout_height="wrap_content"
android:id="@+id/BlogTitle"
android:text="LG Vs Whirlpool Refrigerator:">
</TextView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
android:maxLines="2"
android:layout_marginLeft="5dp"
android:id="@+id/BlogShortDescription"
android:text="Which One Is Better">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:layout_marginBottom="4dp"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/twitter"
android:id="@+id/blogProfileImage">
</ImageView>
<TextView
android:id="@+id/BlogAuthor"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:text="Rajesh"
android:layout_weight="1"
android:textColor="@color/black"
android:textSize="15sp">
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:maxLength="10"
android:layout_marginRight="8dp"
android:layout_marginLeft="5dp"
android:id="@+id/BlogDate"
android:text="July 06, 2021">
</TextView>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>