ViewPager 触摸空白区域时闪烁

5
  • 我有一个情景,使用ViewPager来显示多个代表列数的片段。
  • 现在在平板电脑上,当ViewPager中只有两页/两列时,ViewPager后面会留下空白区域,因为ViewPager占据了整个平板电脑屏幕。
  • 当用户触摸这个空白区域时,剩余的页面开始在屏幕上闪烁滚动。
  • 如何限制用户不要触摸这个空白区域?我还需要允许用户滑动页面进行滚动,怎么处理这两种情况。
1个回答

6
我之前也遇到过这种情况。我的解决方法是当页面数量不足以填充ViewPager时,消费掉触摸事件。
viewPager.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            requestDisallowInterceptTouchEvent(true); // not sure if this is required
            PagerAdapter adapter = viewPager.getAdapter();
            // consume the move event if we have only one page full - removes flickering artifact
            // getNumberOfPagesOnScreen() is a mehtod we have to get the number of pages we are going to display. ymmv
            if (adapter.getCount() <= adapter.getNumberOfPagesOnScreen() && event.getAction() == MotionEvent.ACTION_MOVE) {
                return true;
            } else {
                return false;
            }
        }
    });

谢谢,对我有用。偶尔还是会从左到右跳动,但还好。 - stackflow
谢谢,经过这么多年,我不得不使用ViewPager,这个解决方案通过对我的需求进行小修改来拯救了我。 - H. Serdar Çınar
1
如何获取 adapter.getNumberOfPagesOnScreen() 方法? - g4gaj
  1. 看起来不需要使用requestDisallowInterceptTouchEvent(true)。
  2. "getNumberOfPagesOnScreen()" 描述了在屏幕宽度内视图页面中的项目数量。您可以自行确定它。
- M. Marmor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接