Android 嵌套的 ViewPager 禁用触摸事件
Android Nested ViewPager Disable Touch Event
在我的应用程序中,我有一个 ViewPager
。在其中一个页面中,我有另一个 ViewPager
,其中我通过自定义 ViewPager
实现禁用了滑动手势:
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
}
这很好用;子 ViewPager 中的滑动手势被禁用。但是,除非从屏幕的最边缘开始滑动,否则无法滑动父 ViewPager。我怎样才能让子 ViewPager 忽略所有触摸 events/pass 它们到父视图?
这个解决方案对我有用,你呢?由于我的 ViewSwitcher 没有检测到触摸事件,我拦截了触摸事件,调用了 onTouchEvent() 并返回了 false。这里:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
onTouchEvent(ev);
return false;
}
通过覆盖 onInterceptTouchEvent(),我能够拦截 activity 中的触摸事件。然后我在处理 ListView 切换的 ViewSwitcher 中调用了 onTouchEvent()。最后通过返回 false,确保 ViewGroup 不会使用该事件。
警告:使用此函数需要小心,因为它与 View.onTouchEvent(MotionEvent) 的交互相当复杂,使用它也需要实现该方法以正确的方式作为这个。
原来答案很简单!
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean canScrollHorizontally(int direction) {
return false;
}
}
在我的应用程序中,我有一个 ViewPager
。在其中一个页面中,我有另一个 ViewPager
,其中我通过自定义 ViewPager
实现禁用了滑动手势:
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
}
这很好用;子 ViewPager 中的滑动手势被禁用。但是,除非从屏幕的最边缘开始滑动,否则无法滑动父 ViewPager。我怎样才能让子 ViewPager 忽略所有触摸 events/pass 它们到父视图?
这个解决方案对我有用,你呢?由于我的 ViewSwitcher 没有检测到触摸事件,我拦截了触摸事件,调用了 onTouchEvent() 并返回了 false。这里:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
onTouchEvent(ev);
return false;
}
通过覆盖 onInterceptTouchEvent(),我能够拦截 activity 中的触摸事件。然后我在处理 ListView 切换的 ViewSwitcher 中调用了 onTouchEvent()。最后通过返回 false,确保 ViewGroup 不会使用该事件。
警告:使用此函数需要小心,因为它与 View.onTouchEvent(MotionEvent) 的交互相当复杂,使用它也需要实现该方法以正确的方式作为这个。
原来答案很简单!
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean canScrollHorizontally(int direction) {
return false;
}
}