简体   繁体   中英

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 eg 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 ie 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.

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) {

        }
    });

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) {

        }
    });

添加自定义 onTouch 逻辑的正确方法是调用

viewPager2.getChildAt(viewPager2.getCurrentItem()).setOnTouchListener(...)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM