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!

Android TabLayout+ViewPager禁止滑动的更多相关文章

  1. ViewPager禁止滑动以及它与内层滑动控件水平方向上事件冲突的解决方法

    一.上图 二.场景描写叙述 最近在做项目的时候.遇到一个怪异的需求,描写叙述例如以下: 1.ViewPager中嵌套3个View,当从View1滑动到View2时禁止ViewPager的滑动事件. 2 ...

  2. Android中ViewPager实现滑动条及与Fragment结合的实例教程

    ViewPager类主要被用来实现可滑动的视图功能,这里我们就来共同学习Android中ViewPager实现滑动条及与Fragment结合的实例教程,需要的朋友可以参考下 自主实现滑动指示条先上一个 ...

  3. 011 Android TabLayout+ViewPager实现顶部滑动效果(多个页面)

    1.TabLayout介绍 TabLayout提供了一个水平的布局用来展示Tabs,很多应用都有这样的设计,典型的有网易新闻,简书,知乎等.TabLayout就可以很好的完成这一职责,首先TabLay ...

  4. TabLayoutViewPagerDemo【TabLayout+ViewPager可滑动】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用TabLayout搭配ViewPager实现可滑动的顶部选项卡效果. 效果图 代码分析 1.演示常规的设置. 2.通过自定义Vi ...

  5. android之ViewPager修改滑动速度

    在android中,使用过viewpager的人都清楚,我们如果使用viewpager进行滑动时,如果通过手指滑动来进行的话,可以根据手指滑动的距离来实现,但是如果通过setCurrentItem函数 ...

  6. Android利用ViewPager实现滑动广告板

    •android-support-v4.jar,这是谷歌官方 给我们提供的一个兼容低版本Android设备的软件包,里面包囊了只有在Android3.0以上可以使用的api.而ViewPager就是其 ...

  7. Android重写ViewPager改动滑动灵敏度

        使用ViewPager作为一个页面进行切换.里面能够存放非常多View,但有时在操作View时不小心滑动一下就有可能跳到下一页,这并非我们想要的,这里就须要重写ViewPager改动它的滑动条 ...

  8. android scrollview组件禁止滑动的方法

    xml配置:           android:id="@+id/sc_freement"             android:layout_width="fill ...

  9. Viewpager禁止滑动

    参考:http://www.jianshu.com/p/d3d766cf73d7 public class NoScrollViewPager extends ViewPager { private ...

随机推荐

  1. swift类型操作规范

    type(of:) Applied to an object: the polymorphic (internal) type of the object, regardless of how a r ...

  2. 应用一:Vue之开发环境搭建

    简单分享下vue项目的开发环境搭建流程~ 1.安装nodeJS vue的运行是要依赖于node的npm的管理工具来实现,下载地址:https://nodejs.org/en/.安装完成之后以管理员身份 ...

  3. MongoDB 学习笔记(二):shell中执行增删查改

    一.查 1.查询集合中所有文档:db.集合名.find(). 2.查询集合中第一个文档:db.集合名.findOne(). 3.指定查询条件:第一个参数就是指定查询条件 查询全部文档:db.集合名.f ...

  4. SQL 到 NOSQL 的思维转变

    转自:http://blogread.cn/it/article/3130?f=wb SQL 到 NOSQL 的思维转变 NOSQL系统一般都会宣传一个特性,那就是性能好,然后为什么呢?关系型数据库发 ...

  5. chckBox样式的修改

    在Android开发中,系统自带的默认CheckBox由于比较简陋,可能难以满足部分人的审美需求,不过,Android具有很强的扩展性,自定义CheckBox其实也很简单. 1. Layout中定义C ...

  6. 分布式深度学习之DC-ASGD

    本篇笔记是听刘铁岩老师做Distributed Deep Learning:New Driving Force of Artificial Intelligence报告整理而成 深度学习梯度下降公式如 ...

  7. Android使用C代码

    Android调用C代码 1.开发工具:Android studio 2.0 2.开发前准备: 2. 3. 4.下面我们就来开发我们的程序吧, [1]创建一个java类 package com.adm ...

  8. JavaScript原生值与JSON的转换

    ---------------------------------- ---------------------------- stringify方法的另外两种参数: ---------------- ...

  9. python处理时间戳

    代码如下: def timestamp_datetime(value):     format = '%Y-%m-%d %H:%M:%S'     # value为传入的值为时间戳(整形),如:133 ...

  10. http协议区分头信息和正文

    http协议中的头信息和正文是採用空行分开,什么是空行呢?简单来说,就是\r\n\r\n. 所以将server返回的数据用\r\n\r\n分开后的结果,一个是头信息.一个是正文信息. C#的代码例如以 ...