Отключение и включение подкачки в ViewPager в Android - PullRequest
14 голосов
/ 15 ноября 2011

Я использую пакет совместимости 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.

Ответы [ 3 ]

3 голосов
/ 23 мая 2013

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

1 голос
/ 02 августа 2013
@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

0 голосов
/ 02 февраля 2012

Вы устанавливаете его в 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;
    }
...