0

I am a newbie, sorry for my ignorance. I have some difficulties with viewpager2. Could anyone let me know how to open specific activity by clicking a specific image in viewpager2? My viewPager consists of four images. I got this code online. It works very well, but I want to make images in my view pager work like a button that lets me go to the next (specific) activity. Here is my main activity code:

public class HomeScreenAct extends AppCompatActivity {

private ViewPager2 viewPager2;
private Handler sliderHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_screen);

    viewPager2 = findViewById(R.id.view_pager_image);

    // Preparing image from drawable
    // You can get from API as well
    List<SliderItem> sliderItems = new ArrayList<>();
    sliderItems.add(new SliderItem(R.drawable.jodipan));
    sliderItems.add(new SliderItem(R.drawable.penataran));
    sliderItems.add(new SliderItem(R.drawable.gumul));
    sliderItems.add(new SliderItem(R.drawable.ijen));

    viewPager2.setAdapter(new SliderAdapter(sliderItems, viewPager2));

    viewPager2.setClipToPadding(false);
    viewPager2.setClipChildren(false);
    viewPager2.setOffscreenPageLimit(3);
    viewPager2.getChildAt(0).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);

    CompositePageTransformer compositePageTransformer = new CompositePageTransformer();
    compositePageTransformer.addTransformer(new MarginPageTransformer(40));
    compositePageTransformer.addTransformer(new ViewPager2.PageTransformer() {
        @Override
        public void transformPage(@NonNull View page, float position) {
            float r = 1 - Math.abs(position);
            page.setScaleY(0.85f + r * 0.15f);
        }
    });

    viewPager2.setPageTransformer(compositePageTransformer);

    viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            sliderHandler.removeCallbacks(sliderRunnable);
            sliderHandler.postDelayed(sliderRunnable, 3000); //Slide duration
        }
    });
}

private Runnable sliderRunnable = new Runnable() {
    @Override
    public void run() {
        viewPager2.setCurrentItem(viewPager2.getCurrentItem() + 1);
    }
};

@Override
protected void onPause() {
    super.onPause();
    sliderHandler.removeCallbacks(sliderRunnable);
}

@Override
protected void onResume() {
    super.onResume();
    sliderHandler.postDelayed(sliderRunnable,3000);
}}

And here is my ViewPager Adapter:

public class SliderAdapter extends RecyclerView.Adapter<SliderAdapter.SliderViewHolder>{

private List<SliderItem> sliderItems;
private ViewPager2 viewPager2;

SliderAdapter(List<SliderItem> sliderItems, ViewPager2 viewPager2) {
    this.sliderItems = sliderItems;
    this.viewPager2 = viewPager2;
}

@NonNull
@Override
public SliderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new SliderViewHolder(
            LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.slide_item_container,
                    parent,
                    false
            )
    );
}

@Override
public void onBindViewHolder(@NonNull SliderViewHolder holder, int position) {
    holder.setImage(sliderItems.get(position));
    if(position == sliderItems.size() - 1){
        viewPager2.post(runnable);
    }
}

@Override
public int getItemCount() {
    return sliderItems.size();
}

class SliderViewHolder extends RecyclerView.ViewHolder{

    private RoundedImageView imageView;

    SliderViewHolder(@NonNull View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.imageSlide);
    }

    void setImage(SliderItem sliderItem) {

        // If you want to display your image from the internet
        // you can put your code here using glide or picasso

        imageView.setImageResource(sliderItem.getImage());
    }

}

private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        sliderItems.addAll(sliderItems);
        notifyDataSetChanged();
    }
};}

And here is my sliderItem code:

public class SliderItem {

// Here you can use String variable to store url
// If you want to load image from the internet
private int  image;
SliderItem(int image)
{
    this.image = image;
}

public int getImage() {
    return image;
}}
  • 1
    Does this answer your question? [Open an activity by click on a imageView](https://stackoverflow.com/questions/21975431/open-an-activity-by-click-on-a-imageview) – zimspy Apr 26 '20 at 14:58
  • hi, You can write image view on click method inside SliderViewHolder.Inside that on click, you can do what you want. – Ritu Suman Mohanty Apr 27 '20 at 06:11
  • Hi thanks for your answer. But where i need to put my imageview on xml? This tutorial that i follow tell me to create 2 layout. 1. mainlayout 2. item_slider_container. Im not sure. But thanks for your help i will try it. – Dimas Prabowo Apr 28 '20 at 20:10

0 Answers0