Search code examples
androidandroid-viewpagerhorizontalscrollview

how to set images into the viewpager from horizontalscrollview in android


i am trying to set images into the viewpager from horizontalscrollview.

i can not get the id of the horizontalscrollview to use in setcurrentItem method.

i have tried so many things but i could not.

Here is the MainActivity class

public class MainActivity extends AppCompatActivity {

    int toplamSayfa = 5;
    private View btnNext, btnPrev;
    HorizontalScrollView hs;
    ImageView imageView = null;

    private Integer images[] = {R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e};

    ViewPager viewPager;

    LinearLayout myGallery;


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

        CustomPagerAdapter adapter = new CustomPagerAdapter(this, toplamSayfa);
        myGallery = (LinearLayout) findViewById(R.id.container);
        hs = (HorizontalScrollView) findViewById(R.id.scrollview);
        viewPager = (ViewPager) findViewById(R.id.view_pager);
        btnNext = findViewById(R.id.next);
        btnPrev = findViewById(R.id.prev);

        viewPager.setAdapter(adapter);
        viewPager.setCurrentItem(0);

        btnPrev.setOnClickListener(onClickListener(0));
        btnNext.setOnClickListener(onClickListener(1));

        addImagesToThegallery();
    }

    private void addImagesToThegallery() {

        final LinearLayout imageGallery = (LinearLayout) findViewById(R.id.container);

        for ( Integer image : images) {

            imageGallery.addView(getImageView(image));


    }

}

    private View getImageView(final Integer image) {
        imageView = new ImageView(getApplicationContext());
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        lp.setMargins(0, 0, 10, 0);
        imageView.setLayoutParams(lp);

        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

             //the method where i am stuck 

                 viewPager.setCurrentItem();

            }
        });



        imageView.setImageResource(image);

        return imageView;
    }


    private View.OnClickListener onClickListener(final int i) {
        return new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (i > 0) {

                    if (viewPager.getCurrentItem() < viewPager.getAdapter().getCount() - 1) {
                        viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
                    }
                } else {

                    if (viewPager.getCurrentItem() > 0) {
                        viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
                    }
                }
            }
        };
    }
} 

Solution

  • Update the addImagesToThegallery method to keep the index of the image while adding the image to gallery from your images array :

    private void addImagesToThegallery() {
      final LinearLayout imageGallery = (LinearLayout) findViewById(R.id.container);
    
      int i = 0;
      for ( Integer image : images) {
        imageGallery.addView(getImageView(image,i));
        i += 1;
      }
    }
    

    and use the index here :

    private View getImageView(final Integer image, int index) {
            imageView = new ImageView(getApplicationContext());
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            lp.setMargins(0, 0, 10, 0);
            imageView.setLayoutParams(lp);
    
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                 //use the index here
    
                     viewPager.setCurrentItem(index);
    
                }
            });
    
    
    
            imageView.setImageResource(image);
    
            return imageView;
        }