禁用&;在Android中启用ViewPager中的分页

禁用&;在Android中启用ViewPager中的分页,android,android-viewpager,Android,Android Viewpager,我正在使用android兼容软件包版本4在我的应用程序中显示pdf页面。 我使用PagerAdapter和ViewPager来显示pdf页面,比如水平滚动视图 现在的问题是与分页相关的东西。我可以根据这个线程通过检测viewpager中的child来停止分页,但是当用户触摸到该视图之外的时候,我如何才能使其返回。我为CustomViewPager使用了以下代码 public class CustomViewPager extends ViewPager { private bo

我正在使用android兼容软件包版本4在我的应用程序中显示pdf页面。 我使用PagerAdapter和ViewPager来显示pdf页面,比如水平滚动视图

现在的问题是与分页相关的东西。我可以根据这个线程通过检测viewpager中的child来停止分页,但是当用户触摸到该视图之外的时候,我如何才能使其返回。我为CustomViewPager使用了以下代码

public class CustomViewPager extends ViewPager {

        private boolean enabled;
        private int childId;

        public CustomViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.enabled = true;
        }

        public void setChildId(int childId) {
            this.childId = childId;
        }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent event) {
            boolean result = false;
            View scroll = getChildAt(childId);
            if (scroll != null) {
                Rect rect = new Rect();
                CommonLogic.logMessage("PDF Page Rectangle  ", TAG, Log.VERBOSE);
                scroll.getHitRect(rect);
                if (rect.contains((int) event.getX(), (int) event.getY())) {
                    setPagingEnabled(false);
                    result = true;
                }
            }
            return result;
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (this.enabled) {
                return super.onTouchEvent(event);
            }
            return false;
        }

        public void setPagingEnabled(boolean enabled) {
            this.enabled = enabled;
        }
    }
当尝试触摸pdf页面外部时,
if(scroll!=null)
在两个方向都变为真


有谁能帮我找出如何重新启用它,以便在ViewPager中继续分页。

您将其设置为false,但没有理由将其重置为true。另外,你的拦截触摸逻辑似乎有点奇怪。。。唯一允许寻呼机拦截(从而在
onTouchEvent()
中处理)的时间是将paging enabled设置为false。下面呢

public class CustomViewPager extends ViewPager {

        private boolean enabled;
        private int childId;

        public CustomViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.enabled = true;
        }

        public void setChildId(int childId) {
            this.childId = childId;
        }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent event) {
            boolean result = false;
            View scroll = getChildAt(childId);
            if (scroll != null) {
                Rect rect = new Rect();
                CommonLogic.logMessage("PDF Page Rectangle  ", TAG, Log.VERBOSE);
                scroll.getHitRect(rect);
                if (rect.contains((int) event.getX(), (int) event.getY())) {
                    setPagingEnabled(false);
                    result = true;
                }
            }
            return result;
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (this.enabled) {
                return super.onTouchEvent(event);
            }
            return false;
        }

        public void setPagingEnabled(boolean enabled) {
            this.enabled = enabled;
        }
    }
 @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        boolean result = true;
        View scroll = getChildAt(childId);
        if (scroll != null) {
            Rect rect = new Rect();
            CommonLogic.logMessage("PDF Page Rectangle  ", TAG, Log.VERBOSE);
            scroll.getHitRect(rect);
            if (rect.contains((int) event.getX(), (int) event.getY())) {
                setPagingEnabled(false);
                result = false;
            } else {
                setPagingEnabled(true);
            }
        }
        return result;
    }

我在分页图像文件时遇到了类似的问题,这些文件需要收缩才能缩放。简单地说,需要一种方法,在放大图像时禁用分页,在显示整个图像时启用分页。我是这样解决的,我想你也可以做类似的事情。 第一个扩展:MyViewPager类扩展ViewPager{…} 然后在该类中重写以下两个方法

    @Override
public boolean onTouchEvent(MotionEvent event) {
    if (YOUR_CRITERIA_TOENABLE_DISABLE) {
        return true;

    } else {
        return super.onTouchEvent(event);
    }
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    return super.onInterceptTouchEvent(event);
}
确保在xml布局或从代码动态创建中使用视图寻呼机

@Override
public boolean onTouchEvent(MotionEvent event) {
     if (this.enabled) {
           return super.onTouchEvent(event);
     }
     return false;
}

public void setPagingEnabled(boolean enabled) {
    this.enabled = enabled;
}
将“return false”替换为“return this.enable”,并将this.enable的默认值设置为false