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

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

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


person Shashank_Itmaster    schedule 15.11.2011    source источник
comment
Вы пробовали это: stackoverflow.com/a/2655740/969325   -  person Warpzit    schedule 24.01.2012


Ответы (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);
}

Обязательно используйте свой пейджер представления в макетах xml или динамическом создании из кода.

person Igor Čordaš    schedule 23.05.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

person Hitesh    schedule 02.08.2013

Вы устанавливаете его на 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;
    }
person Brian Dupuis    schedule 01.02.2012