【问题标题】:Multiple ViewPager Touch Event多个 ViewPager 触摸事件
【发布时间】:2017-11-02 13:03:13
【问题描述】:

我在一个 Activity 中有 2 个 ViewPager,我希望它们在我滑动其中任何一个时同步移动。

例如在向右滑动 Viewpager1 时,Viewpager 2 显示也向右移动。

下面是我的 On Touch 事件代码:

    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;

        }
    });

现在代码仅在 Viewpager1 的情况下有效,即在滑动 Viewpager1 时,ViewPager2 也在同一方向移动,但是当我滑动 Viewpager2 时,Viewpager 1 不会移动。

需要帮助。提前致谢。

【问题讨论】:

    标签: android android-viewpager


    【解决方案1】:

    使用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) {
    
            }
        });
    

    【讨论】:

    • 如果对你有帮助,请接受@DineshSingh
    【解决方案2】:

    您需要使用ViewPageraddOnPageChangeListener来处理用户在ViewPager上滑动时的事件

    addOnPageChangeListener(ViewPager.OnPageChangeListener listener)

    添加一个监听器,当页面更改或逐渐滚动时将调用该监听器。

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

    【讨论】:

    • 这不会达到预期的效果,因为 onPageScrolled 是在页面移动时调用的,而不是在它卡入到位时调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    相关资源
    最近更新 更多