Dinesh Singh
Dinesh Singh

Reputation: 181

Multiple ViewPager Touch Event

I have 2 ViewPagers in an Activity, I want them to move in sync when i swipe anyone of them.

For e.g. On Swiping Viewpager1 On Right Direction Viewpager 2 show also move in Right Direction.

Below is my code for On Touch Event:

    viewPager2.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            viewPager1.onTouchEvent(event);
            return false;

        }

    });


    viewPager1.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            viewPager2.onTouchEvent(event);
            return false;

        }
    });

Now the code is working only incase of Viewpager1 i.e On Swiping Viewpager1 ViewPager2 is also moving in same direction but when i swipe Viewpager2 Viewpager 1 doesn't move.

Need help. Thanks in advance.

Upvotes: 0

Views: 935

Answers (2)

Goku
Goku

Reputation: 9732

You need to use addOnPageChangeListener of ViewPager to handle event when user swipe on ViewPager

addOnPageChangeListener(ViewPager.OnPageChangeListener listener)

Add a listener that will be invoked whenever the page changes or is incrementally scrolled.

viewPager1.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                
        }

        @Override
        public void onPageSelected(int position) {
            viewPager2.setCurrentItem(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    viewPager2.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
               
        }

        @Override
        public void onPageSelected(int position) {
           viewPager1.setCurrentItem(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

Upvotes: 1

MichaelStoddart
MichaelStoddart

Reputation: 5639

Use OnPageChangeListener:

viewPager1.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            viewPager2.setCurrentItem(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    viewPager2.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            viewPager1.setCurrentItem(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

Upvotes: 1

Related Questions