Как открыть следующее действие, щелкнув по изображению c в viewpager2? - PullRequest
0 голосов
/ 26 апреля 2020

Я новичок ie, извините за мое невежество. У меня есть некоторые трудности с viewpager2. Может ли кто-нибудь дать мне знать, как открыть определенную c активность, щелкнув указанное изображение c в viewpager2? Мой viewPager состоит из четырех изображений. Я получил этот код онлайн. Это работает очень хорошо, но я хочу, чтобы изображения в моем пейджере просмотра работали как кнопка, которая позволяет мне go перейти к следующему (заданному c) действию. Вот мой основной код активности:

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);
}}

А вот мой адаптер ViewPager:

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();
    }
};}

А вот мой код слайдера:

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;
}}
...