ViewPager中怎样让子类也可以滑动(父类不抢子类的滑动事件)?

1、相关的概念方法

android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:

1)public boolean dispatchTouchEvent(MotionEvent ev)          这个方法用来分发TouchEvent

2)public boolean onInterceptTouchEvent(MotionEvent ev)         这个方法用来拦截TouchEvent

3)public boolean onTouchEvent(MotionEvent ev)                 这个方法用来处理TouchEvent

注意:不是所有的View的子类,很多教程都说的是所有的View的子类,只有可以向里面添加View的控件才需要分发,比如TextView它本身就是最小的view了,所以不用再向它的子视图分发了,它也没有子视图了,所以它没有dispatch和Intercept,只有touchEvent。

2、处理事件

//事件分发表示是否拦截,返回false表示不拦截,可以让嵌套在内部的viewPager相应的滑动。在父viewPager中是这个方法
public boolean onInterceptTouchEvent(MotionEvent arg0){return false;}或者
//事件分发,请求父控件及祖宗控件不要拦截事件
//在子viewPager中是这个方法
public boolean dispatchTouchEvent(MotionEvent ev){getParent().requestDisallowInterceptTouchEvent(true);return super.dispatchTouchEvent(ev);
}

更详细的代码

父ViewPager
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;/*** 不能左右划的ViewPager* * @author Kevin* */
public class NoScrollViewPager extends ViewPager {public NoScrollViewPager(Context context, AttributeSet attrs) {super(context, attrs);}public NoScrollViewPager(Context context) {super(context);}// 表示事件是否拦截, 返回false表示不拦截, 可以让嵌套在内部的viewpager相应左右划的事件@Overridepublic boolean onInterceptTouchEvent(MotionEvent arg0) {return false;}/*** 重写onTouchEvent事件,什么都不用做*/@Overridepublic boolean onTouchEvent(MotionEvent arg0) {return false;}
}

子类ViewPager

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;/*** 11个子页签水平滑动的Viewpager, 暂时不用* * @author Kevin* */
public class HorizontalViewPager extends ViewPager {public HorizontalViewPager(Context context, AttributeSet attrs) {super(context, attrs);}public HorizontalViewPager(Context context) {super(context);}/*** 事件分发, 请求父控件及祖宗控件是否拦截事件*/@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {
//进行判断,有的需要父控件拦截有的不需要父控件拦截if (getCurrentItem() != 0) {getParent().requestDisallowInterceptTouchEvent(true);// 用getParent去请求,// 不拦截} else {// 如果是第一个页面,需要显示侧边栏, 请求父控件拦截getParent().requestDisallowInterceptTouchEvent(false);// 拦截}return super.dispatchTouchEvent(ev);}}
总结 : 目前只要知道怎样拦截或者不拦截ViewPager中的事件就好了,太深入研究不能马上领会,需要在平时的开发中去实践体会。上面的代码的关键点就是在拦截事件上做了文章 onInterceptTouchEvent,而disPatchTouchEvent是默认false,标识这个控件内部的事件可以继续向下分发
参考链接  http://www.cnblogs.com/jqyp/archive/2012/04/25/2469758.html

ViewPager子类与父类滑动冲突的情况相关推荐

  1. 解决ViewPager嵌套WebView时滑动冲突问题

    问题描述 当ViewPager里嵌套WebView时,默认WebView是处理不了滑动事件的.这样的话,如果WebView里内容一屏展示不完,就没法查看完整内容了. 解决方案 定制WebView,覆写 ...

  2. Android嵌套滑动冲突

    android在嵌套滑动的时候会产生滑动冲突.之前我也碰到,但是以前的笔记本丢失了,所以只能重新再写一章. 一.会产生滑动冲突的情况 那么什么时候会产生滑动冲突呢?比如你有个activity,acti ...

  3. 自定义View(二)--表层浅析View的事件分发机制和滑动冲突

    转载请注明出处:From李诗雨:http://blog.csdn.net/cjm2484836553/article/details/54387722 不诗意的女程序猿不是好厨师~ 这篇文章来得有些曲 ...

  4. 安卓基础知识之View篇(四):View 事件滑动冲突解决方案

    安卓基础知识系列旨在简明扼要地提供面试或工作中常用的基础知识,让对安卓还不太熟悉的小伙伴更快地入门.同时自己在工作中,也没法完全记住所有的基础细节,写这样的系列文章,可以让自己形成一个更完备的知识体系 ...

  5. Android WebView与ViewPager的滑动冲突分析

    前言 如题所述,我使用的架构是ViewPager+Fragment+WebView进行开发的,由于WebView的html页面代码是第三方的,这里不好放出来,所以只能放一个大致的架构图,如图所示,Vi ...

  6. PullToRefreshListView中嵌套ViewPager滑动冲突的解决

    PullToRefreshListView中嵌套ViewPager滑动冲突的解决 最近恰好遇到PullToRefreshListView中需要嵌套ViewPager的情况,ViewPager 作为头部 ...

  7. (09)System Verilog 父类与子类成员变量同名冲突

    (09)System Verilog 父类与子类成员变量同名冲突 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 父类与子类成员变量同 ...

  8. 关于ViewPager嵌套ViewPager左右滑动冲突解决方法

    情况如下,TabLayout+ViewPager+Fragment,其中一个Fragment里面又嵌套了一层TabLayout+ViewPager+Fragment,运行的时候出现了两个情况. 1.子 ...

  9. 解决ScrollView嵌套ViewPager出现的滑动冲突问题

    /** * 解决ScrollView嵌套ViewPager出现的滑动冲突问题 */ public class ScrollView1 extends ScrollView { private bool ...

最新文章

  1. 2021-7-26 pytorch深度学习框架学习
  2. jq实现div移入与移出以及获得与失去焦点
  3. 爱屋及乌 年轻投资者因喜爱Snapchat亏钱也买Snap股票
  4. qt 手动设置控件的位置
  5. AtCoder Beginner Contest 192 F - Potion 背包dp
  6. 决策树 prepruning_智能建筑运维前探 AI天天见之五:决策树算法应用探索
  7. C语言,你真的弄懂了么?
  8. 执行 npm install -g @vue/cli 报错
  9. Modelica运算符
  10. 华为防火墙笔记-网络地址转化NAT
  11. 灌篮高手湘北高中原型
  12. cc域名转入可以吗?其特点是什么?
  13. 了解抖音小店店铺装修功能以及条件
  14. AOPlog4j2propagation的7种事务配置
  15. COGS 1043. [Clover S2] Freda的迷宫
  16. Android模拟发短信,[转载]Android模拟器中模拟GPS、打电话、发短信
  17. css中背景图片路径问题
  18. 安防监控流媒体服务器对接宇视摄像机配置OCX插件安装时出现Failed to register ocx, error code 14001错误问题分析
  19. 周易六十四卦——否卦
  20. Qt 程序名称加上空格

热门文章

  1. Hands-on Lab (6) - 配置Gogs的Webhook
  2. 在Ubuntu上安装Jupyter Notebook
  3. 错误的日志可能会导致疯狂;好日志可能会成为魔杖
  4. 谷歌正在移除 Chrome 的“关闭其他选项卡”选项
  5. 使用.NET Core创建服务监视器应用程序
  6. matlab外部调用lingo,讲讲官方的例子,MATLAB调用Lingo
  7. 底层框架_百度PaddleCV硬核升级 与飞桨底层框架领先能力全面结合实现软硬一体...
  8. mysql 无法创建用户_mysql不能创建用户
  9. python 热力图_python高维数据型图表热力图、树形图
  10. 两个not exists_分享两个冷门但又超实用的 Vim 使用技巧!