Отключение и включение пейджинга в 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;
}