在我们平时的开发中一般是不推荐ScrollView中再嵌套ListView,ViewPager等其他可滑动组件的(至少Google是不推荐我们这样做的),但是为了实现一些特殊的需求,我们又不得不这样做,像一些知名的APP都有这样的先例,那他们是怎么做到的呢.

  最近由于项目需要,需要展示公司所有的产品目录,一级目录只有27个,可美工为了视觉的美观,将27个一级目录分为了三个组,每组中又有三屏可以滑动,为了这个需求,就不得不在ScrollView中嵌套ViewPager了,我目前只有这个思路,等我将界面绘制出来后,发现ViewPager几乎是滑不动的,要想滑起来特别困难,这样的用户体验太差了,第一时间想到了事件冲突,ScrollView拦截到事件后要处理,就导致ViewPager滑起来非常的吃力,上网查阅后也没有相关的现成的方法,只好自己苦想了.

 有了需求以后,我们就着手开始编写程序了,下面是我对ViewPager的一个重写:

 先看下效果图:

这样就会有即上下滑动又左右滑动的情况出现

public class HomeBannerViewPager extends ViewPager {private int timerIndex = 0;private int currentPositon = 0;private boolean flag = true;private float mLastMotionY;private float mLastMotionX;public HomeBannerViewPager(Context context) {super(context);  }public HomeBannerViewPager(Context context, AttributeSet attrs) {super(context, attrs);    }@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {final float x = ev.getX();final float y = ev.getY();switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:setPullToScrollViewStatus(true);flag = true;mLastMotionX = x;mLastMotionY = y;mHandler.sendEmptyMessage(1);break;case MotionEvent.ACTION_MOVE:if (flag) {if (Math.abs(y - mLastMotionY) > Util.dip2px(20)&& Math.abs(x - mLastMotionX) < Util.dip2px(5)) {flag = false;setPullToScrollViewStatus(false);}}break;case MotionEvent.ACTION_UP:setPullToScrollViewStatus(false);mHandler.sendEmptyMessage(0);break;case MotionEvent.ACTION_CANCEL:setPullToScrollViewStatus(false);mHandler.sendEmptyMessage(0);break;}return super.dispatchTouchEvent(ev);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent event) {return super.onInterceptTouchEvent(event);}@Overridepublic boolean onTouchEvent(MotionEvent event) {return super.onTouchEvent(event);}/*** ������ҳ����ScrollView�ؼ���״̬�������Banner�����¼���ͻ* * @param disallowIntercept*/private void setPullToScrollViewStatus(boolean disallowIntercept) {getParent().getParent().getParent().requestDisallowInterceptTouchEvent(disallowIntercept);} 

android自定义ViewPager之——处理与ScrollView的事件冲突相关推荐

  1. Android 自定义ViewPager设置屏蔽左右滑动事件

    只要有欲望,就应该有奋斗的心.... 屏蔽左右滑动事件的viewPager public class CustomNoScrollViewPager extends ViewPager{private ...

  2. android如何自定义viewpager,Android自定义ViewPager实现个性化的图片切换效果

    第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主界面通通ViewPager,以及图片切换也抛弃了ImageSwitch之类的,开始让ViewPager来做.时间长了,ViewPager的 ...

  3. Android自定义ViewPager图片指示器,兼容实现底部横线指示器

    前言  记得以前自己使用过的ViewPager Indicator有JakeWharton大神的开源库ViewPagerIndicator,v4包自带的PagerTitleStrip以及Android ...

  4. Android 自定义viewpager 三张图片在同一屏幕轮播的效果

    github:https://github.com/nickeyCode/RoundImageViewPager 说实话不知道怎么描述这个效果,在网页上见得跟多,公司要求做这个效果得时候不知道怎么用文 ...

  5. android 自定义viewpager指示器,Android自定义View Flyme6的Viewpager指示器

    最新更新的Flyme6整体效果不错,动画效果增加了很多了,看了看flyme6的Viewpager指示器,觉得有点意思,就模仿写了一下,整体效果如下: Gradle allprojects { repo ...

  6. Android 自定义 HorizontalScrollView 横向滑动效果

    自从Gallery被谷歌废弃以后,Google推荐使用ViewPager和HorizontalScrollView来实现Gallery的效果.的确HorizontalScrollView可以实现Gal ...

  7. 三行代码接入,社交软件打字时底下弹出的表情布局,自定义ViewPager+页面点标+各种功能的android小框架。...

    (转载请声明出处:http://www.cnblogs.com/linguanh/) 前言: 接上次分享的 ListView 动态加载类,入口:http://www.cnblogs.com/lingu ...

  8. Android 自定义ScrollView ListView 体验各种纵向滑动的需求

    1.概述 群里的一个哥们有个需求是这样的:问题:主要功能就是:1.循环的一个滑动:2.每次滑动结束,保持每个Item的完整.然后我当时给他写了个Demo,所有代码都在Activity里面,后期看来其太 ...

  9. Android自定义view之ViewPager指示器——2

    Android自定义view之ViewPager指示器--2 上一篇<Android自定义view之ViewPager指示器--1>中我们一起写了测量和布局的流程.本篇我们继续讲解事件分发 ...

  10. Android自定义view之ViewPager指示器——1

    Android自定义view之ViewPager指示器--1 在上两篇文章<Android自定义view之measure.layout.draw三大流程>以及<Android自定义v ...

最新文章

  1. PMP知识点(二、整合管理)
  2. 比特币详解3.0 ——区块链的救赎
  3. 时序分析:串匹配-KMP算法
  4. UE4学习-设置地图,创建材质
  5. Python数据结构之四——set(集合)
  6. SpringBoot2.5.4发送邮件4种方式
  7. linux 7升级win10双系统,安装 Windows 10 + Centos 7 双系统共存
  8. 跨平台移动应用开发框架AppCan2.0开发经验分享
  9. mac 安装 Xdebug
  10. java xlsx读写_java中怎样从Excel中读写数据
  11. Rust: Rangechar 'a'..'z' 能干什么?......待续
  12. java实验报告_Java实验报告(一)
  13. DAS、SAN和NAS三种存储方式
  14. Shiro(三)——三种不同的登录方式、RememberMe登录、Shiro 授权、其他配置(配置注销后的跳转页面、处理 JsessionID)
  15. UNITY个人版设置深色主题
  16. Workflow(12) DNSResolver
  17. c语言实现简单的猜数字游戏(1~100)
  18. 珍贵数学文献(II)
  19. Linux UART编程 驱动蓝牙芯片
  20. Android Service之设备存储空间监控

热门文章

  1. Javascript:json数据根据某一个字段进行排序
  2. Pannellum:实例之通过按钮控制全景图
  3. 网络_Wake-on-Lan(WoL)软件推荐, 让你不在局域网也能实现网络唤醒
  4. 论文评析-Incremental Boosting Convolutional Neural Network for Facial Action Unit Recognition,NIPS, 2016
  5. catkin_make和cmake
  6. 高净值人群依靠什么可以挣那么多钱?
  7. python 验证码
  8. hdu 4155 回溯
  9. 高斯滤波程序编写 opencv C++ CSU
  10. 【pytorch】(断点)继续上次训练