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

标签 android android-viewpager

我正在使用 android 兼容包版本 4 在我的应用程序中显示 pdf 页面。 我使用 PagerAdapter 和 ViewPager 来显示 pdf 页面,例如水平 ScrollView 。

现在问题出在分页相关的东西上。我可以根据这个线程 android: ViewPager and HorizontalScrollVIew 检测 viewpager 内的 child 来停止分页。 ,但是当用户触摸该 View 之外时,我如何才能启用它。我为 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) 在两个方向上都变为 true。

任何人都可以帮助我了解如何重新启用它,以便在 ViewPager 中继续分页。

最佳答案

我在处理需要双指缩放的分页图像文件时遇到了类似的问题。简单地说,需要一种方法来在放大图像时禁用分页,并在显示整个图像时启用分页。我这样解决了它,认为你可以做类似的事情。 首先扩展:类 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 布局或从代码动态创建中使用 View 分页器。

关于android - 在 Android 的 ViewPager 中禁用和启用分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8134336/

相关文章:

android - 如何在不更改 android 中的静态变量的情况下创建相同 Activity 的新实例?

android - notifyDataSetChanged 不适用于 FragmentPagerAdapter

android - TextView 尺寸 - 手机和平板电脑

android - 在非 Activity 类中需要上下文

android - fragment : Remove all fragments in a view

android - Viewpager - 尝试处理 catch 但指针索引超出范围

android - 在Viewpager上播放声音

Android 使用 ListView 查看分页器并动态添加文本

Android AlarmManager - RTC_WAKEUP 与 ELAPSED_REALTIME_WAKEUP

android - 亮度屏幕过滤器