[关闭]
@RitcheeQinG 2020-09-07T02:09:26.000000Z 字数 944 阅读 324

ViewPager禁用滑动

Android


众所周知,安卓开发上最不缺奇奇怪怪的需求,有人希望首页Tab + VP可以滑动,有人又希望不能滑动
可以滑动不用多说了,那么不能滑动怎么实现呢?

重写 onInterceptTouchEvent() 返回false即可禁用滑动
不过这么写了可能还有部分情况仍可滑动
这可能是因为child没有焦点导致的
给child设置 focusable = trueclickable = true 即可。

  1. /**
  2. * 理论上这个接口肯定应该有,
  3. * 因为你未来肯定不止需要设置这一个东西不可滚动,
  4. * 等到什么 NoScrollRecyclerView,NoScrollViewPager2出来,
  5. * 都得实现这个接口。
  6. */
  7. public interface IScrollable {
  8. void setCanScroll(boolean canScroll);
  9. boolean canScroll();
  10. }
  11. public class NoScrollViewPager extends ViewPager {
  12. private boolean canScroll = false;
  13. public NoScrollViewPager(@NonNull Context context) {
  14. super(context);
  15. }
  16. public NoScrollViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
  17. super(context, attrs);
  18. }
  19. @Override
  20. public boolean onInterceptTouchEvent(MotionEvent ev) {
  21. return canScroll ? super.onInterceptTouchEvent(ev) : canScroll;
  22. }
  23. @Override
  24. public void setCurrentItem(int item) {
  25. super.setCurrentItem(item, false);
  26. }
  27. @Override
  28. public void setCanScroll(boolean canScroll) {
  29. this.canScroll = canScroll;
  30. }
  31. @Override
  32. public boolean canScroll() {
  33. return canScroll;
  34. }
  35. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注