在Android中的ViewPager中禁用和启用分页

Sha*_*ter 14 android android-viewpager

我使用Android兼容包版本4在我的应用程序中显示pdf页面.我使用PagerAdapter和ViewPager来显示水平滚动视图等pdf页面.

现在的问题在于分页相关的东西.我可以通过检测viewpager中的子进程根据这个线程android:ViewPager和Horizo​​ntalScrollVIew来停止分页,但是当用户触摸该视图之外时,我该如何才能启用它.我使用了以下CodeViewPager代码.

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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

当尝试触摸pdf页面之外,那么if(scroll!=null)在两个方向上都变为真实.

任何人都可以帮我解决如何启用它,以便在ViewPager中继续分页.

Igo*_*daš 3

我在分页图像文件时遇到了类似的问题,需要捏合缩放。简而言之,需要一种在图像放大时禁用分页并在显示整个图像时启用分页的方法。我这样解决了它,并认为你可以做类似的事情。首先扩展: class MyViewPager extends 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);
}
Run Code Online (Sandbox Code Playgroud)

请务必在 xml 布局中使用视图分页器或从代码动态创建。