У меня есть viewpager, который переключается между вкладками при прокрутке влево/вправо. На моей второй вкладке у меня есть некоторые пользовательские представления, у которых есть слушатели для ущемления и перетаскивания, но когда я пытаюсь ущипнуть или перетаскивать, просмотрщик начинает прокручивать страницу.
Решение приходит мне на ум - отключить прокрутку при касании этих конкретных видов и только прокручивать при касании вне этих представлений. Возможно ли это?
Обновлено: @Asok любезно предоставил решение. Но затем обновил код, который не работал бы в моем случае, поэтому я разместил предыдущий фрагмент кода, который работал у меня:
public class CustomViewPager extends ViewPager {
private boolean swipeable = true;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
// Call this method in your motion events when you want to disable or enable
// It should work as desired.
public void setSwipeable(boolean swipeable) {
this.swipeable = swipeable;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
return (this.swipeable) ? super.onInterceptTouchEvent(arg0) : false;
}
Предположим, что у меня есть перетаскиваемый вид, и мне нужно отключить прокрутку при перетаскивании начала и повторного включения при перетаскивании, закончив так в TouchEvent моего так называемого вида:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
//disable swiping when the button is touched
((ActivityOriginal) getActivity()).setSwipeable(false);
//the rest of the code...
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
//re enable swipping when the touch is stopped
//the rest of the code...
((ActivityOriginal) getActivity()).setSwipeable(true);
break;
}
return true;
}