Отключение и включение пейджинга в ViewPager в Android

Я использую пакет совместимости Android версии 4 для отображения pdf-страниц в своем приложении. Я использовал PagerAdapter и ViewPager для отображения страниц в формате pdf, таких как горизонтальное представление прокрутки.

Теперь проблема связана с файлом, связанным с пейджингом. Я могу остановить пейджинг, обнаружив дочерние элементы внутри viewpager в соответствии с этим потоком android: ViewPager и HorizontalScrollVIew, но как могу ли я включить это обратно, когда пользователь коснется этого представления. Я использовал следующий код для 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.

Ответы

Ответ 1

У меня была аналогичная проблема с файлами изображений подкачки, которые нуждаются в масштабировании для увеличения. Проще говоря Необходим способ отключения пейджинга при увеличении изображения и включении его при показе всего изображения. Я решил это так и подумал, что вы можете сделать нечто подобное. Первой расширением: класс 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 или динамическом создании из кода.

Ответ 2

@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

Ответ 3

Вы устанавливаете его в false, но не имеете случая, чтобы вернуть его обратно в значение true. Кроме того, ваша сенсорная логика перехвата кажется немного странной... единственный раз, когда вы разрешаете пейджеру перехватывать (и тем самым обрабатывать в onTouchEvent()), - это когда вы настроили пейджинг на false. Как насчет следующего?

 @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;
    }