• Android TabLayout+ViewPager禁止滑动


    1、重写ViewPager并重写覆盖ViewPager的onInterceptTouchEvent(MotionEvent arg0)方法和onTouchEvent(MotionEvent arg0)方法,这两个方法的返回值都是boolean类型的,只需要将返回值改为false,那么ViewPager就不会消耗掉手指滑动的事件了,转而传递给上层View去处理或者该事件就直接终止了。

    2、和TabLayout一起使用的时候,点击TabLayout上的按钮还会有滑动的效果,接下来的处理super.setCurrentItem(item, false);表示切换的时候,不需要切换时间。 
    就可以去掉那个滑动效果了

    public class NoScrollViewPager extends ViewPager {
        private boolean noScroll = false;
    
        public NoScrollViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public NoScrollViewPager(Context context) {
            super(context);
        }
    
        public void setNoScroll(boolean noScroll) {
            this.noScroll = noScroll;
        }
    
        @Override
        public void scrollTo(int x, int y) {
            super.scrollTo(x, y);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent arg0) {
            if (noScroll)
                return false;
            else
                return super.onTouchEvent(arg0);
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent arg0) {
            if (noScroll)
                return false;
            else
                return super.onInterceptTouchEvent(arg0);
        }
    
        @Override
        public void setCurrentItem(int item, boolean smoothScroll) {
            super.setCurrentItem(item, smoothScroll);
        }
    
        @Override
    
        public void setCurrentItem(int item) {
    
            super.setCurrentItem(item, false);//表示切换的时候,不需要切换时间。
    
        }
    
    }

    TabLayout+ViewPager取消滑动,留点击,消除滑动出现的左右移动bug

    public class BanViewPager extends ViewPager {
    
    private boolean isCanScroll = true;
    
    public BanViewPager(Context context) {
    
          super(context);
    
    }
    
    public BanViewPager(Context context, AttributeSet attrs) {
    
            super(context, attrs);
    
    }
    
    public void setNoScroll(boolean noScroll) {
    
            this.isCanScroll = noScroll;
    
    }
    
    @Override
    
    public void scrollTo(int x, int y) {
    
          super.scrollTo(x, y);
    
    }
    
    @Override
    
    public boolean onTouchEvent(MotionEvent arg0) {
    
        if (isCanScroll){
    
                return false;
    
        }else{
    
               return super.onTouchEvent(arg0);
    
       }
    
    }
    
    @Override
    
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
    
          if (isCanScroll){
    
                  return false;
    
          }else{
    
                return super.onInterceptTouchEvent(arg0);
    
          }
    
        }
    
    }

    自定义的ViewPager和其他网上的基本大同小异!起最后关键的东西要出现了,请看xml布局文件

    布局文件:

    <android.support.design.widget.TabLayout
    
            android:id="@+id/tablayout"
    
           android:layout_width="match_parent"
    
           android:layout_height="wrap_content"
    
           app:tabIndicatorColor="@color/indigo"
    
           app:tabTextColor="@color/time_item_gray"
    
           app:tabSelectedTextColor="@color/indigo">
    
    </android.support.design.widget.TabLayout>
    
    <com.hengsu.moran.profile.model.BanViewPager
    
           android:id="@+id/viewpage"
    
          android:layout_width="match_parent"
    
          android:layout_height="wrap_content"
    
           android:isScrollContainer="true">
    
    </com.hengsu.moran.profile.model.BanViewPager>

    一般的这样自定义就可以解决TabLayout下面的ViewPager的滑动,但是细心的同学,依然发现有滑动出现的左右移动bug!!!并没有全部固定ViewPager,看了xml布局文件,细心的同学会发现,我在自定义的Viewpager控件中加了

    android:isScrollContainer="true"

    表示可以滚动的,然后我们就可以解决滑块出现的滑动出现左右移动bug!

  • 相关阅读:
    CF Hello 2020 E.New Year and Castle Construction
    HTML 简介
    グランドエスケープ
    CF 1244 C
    N皇后解法以及位运算优化
    CF
    动态规划TG.lv(1) (洛谷提高历练地)
    搜索Ex (洛谷提高历练地)
    数字图像处理——图像增强
    数字图像处理——图像的几何变换
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7471665.html
Copyright © 2020-2023  润新知