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!

最新文章

  1. 如何学好JAVA编程
  2. lambda函数、lambda表达式
  3. VMware workstaion上传虚拟机到VMware EXSI 5.5
  4. YTU 2615: AB编程题--世界杯小组赛
  5. SDN:软件定义网络
  6. Oracle游标、参数的使用例子
  7. 进程外Session和进程内Session存储
  8. Git与码云(Git@OSC)入门-如何在实验室和宿舍同步你的代码(1)
  9. python 元组用法
  10. Network Policy - 每天5分钟玩转 Docker 容器技术(171)
  11. idea在maven打包时运行Test测试, 导致打包失败, 乱七八糟的错误
  12. SpringBoot2使用WebFlux函数式编程
  13. Jacobi-Anger expansion
  14. luogu P2680 运输计划
  15. mysql创建用户并给用户分配权限
  16. java BIO/NIO
  17. bzoj2856: [ceoi2012]Printed Circuit Board
  18. Fastqc 能够识别的碱基编码格式
  19. Hive将txt、csv等文本文件导入hive表
  20. Delphi APP 開發入門(七)通知與雲端推播

热门文章

  1. 基准测试-jmeter压力测试activeMQ之一环境安装配置
  2. Python基础:dict &amp; set
  3. 洛谷P1941飞扬的小鸟 完全背包
  4. KEEPALIVED+LVS+MYCAT实现MYSQL高可用环境搭建
  5. 四种ASP网页跳转代码
  6. 【JavaScript框架封装】实现一个类似于JQuery的CSS样式框架的封装
  7. JavaScript正则表达式总结
  8. POJ 2377 Bad Cowtractors( 最小生成树转化 )
  9. 洛谷P1567 统计天数
  10. MAVEN 的常用命令