android自定义ViewPager之——处理与ScrollView的事件冲突
在我们平时的开发中一般是不推荐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的事件冲突相关推荐
- Android 自定义ViewPager设置屏蔽左右滑动事件
只要有欲望,就应该有奋斗的心.... 屏蔽左右滑动事件的viewPager public class CustomNoScrollViewPager extends ViewPager{private ...
- android如何自定义viewpager,Android自定义ViewPager实现个性化的图片切换效果
第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主界面通通ViewPager,以及图片切换也抛弃了ImageSwitch之类的,开始让ViewPager来做.时间长了,ViewPager的 ...
- Android自定义ViewPager图片指示器,兼容实现底部横线指示器
前言 记得以前自己使用过的ViewPager Indicator有JakeWharton大神的开源库ViewPagerIndicator,v4包自带的PagerTitleStrip以及Android ...
- Android 自定义viewpager 三张图片在同一屏幕轮播的效果
github:https://github.com/nickeyCode/RoundImageViewPager 说实话不知道怎么描述这个效果,在网页上见得跟多,公司要求做这个效果得时候不知道怎么用文 ...
- android 自定义viewpager指示器,Android自定义View Flyme6的Viewpager指示器
最新更新的Flyme6整体效果不错,动画效果增加了很多了,看了看flyme6的Viewpager指示器,觉得有点意思,就模仿写了一下,整体效果如下: Gradle allprojects { repo ...
- Android 自定义 HorizontalScrollView 横向滑动效果
自从Gallery被谷歌废弃以后,Google推荐使用ViewPager和HorizontalScrollView来实现Gallery的效果.的确HorizontalScrollView可以实现Gal ...
- 三行代码接入,社交软件打字时底下弹出的表情布局,自定义ViewPager+页面点标+各种功能的android小框架。...
(转载请声明出处:http://www.cnblogs.com/linguanh/) 前言: 接上次分享的 ListView 动态加载类,入口:http://www.cnblogs.com/lingu ...
- Android 自定义ScrollView ListView 体验各种纵向滑动的需求
1.概述 群里的一个哥们有个需求是这样的:问题:主要功能就是:1.循环的一个滑动:2.每次滑动结束,保持每个Item的完整.然后我当时给他写了个Demo,所有代码都在Activity里面,后期看来其太 ...
- Android自定义view之ViewPager指示器——2
Android自定义view之ViewPager指示器--2 上一篇<Android自定义view之ViewPager指示器--1>中我们一起写了测量和布局的流程.本篇我们继续讲解事件分发 ...
- Android自定义view之ViewPager指示器——1
Android自定义view之ViewPager指示器--1 在上两篇文章<Android自定义view之measure.layout.draw三大流程>以及<Android自定义v ...
最新文章
- PMP知识点(二、整合管理)
- 比特币详解3.0 ——区块链的救赎
- 时序分析:串匹配-KMP算法
- UE4学习-设置地图,创建材质
- Python数据结构之四——set(集合)
- SpringBoot2.5.4发送邮件4种方式
- linux 7升级win10双系统,安装 Windows 10 + Centos 7 双系统共存
- 跨平台移动应用开发框架AppCan2.0开发经验分享
- mac 安装 Xdebug
- java xlsx读写_java中怎样从Excel中读写数据
- Rust: Rangechar 'a'..'z' 能干什么?......待续
- java实验报告_Java实验报告(一)
- DAS、SAN和NAS三种存储方式
- Shiro(三)——三种不同的登录方式、RememberMe登录、Shiro 授权、其他配置(配置注销后的跳转页面、处理 JsessionID)
- UNITY个人版设置深色主题
- Workflow(12) DNSResolver
- c语言实现简单的猜数字游戏(1~100)
- 珍贵数学文献(II)
- Linux UART编程 驱动蓝牙芯片
- Android Service之设备存储空间监控
热门文章
- Javascript:json数据根据某一个字段进行排序
- Pannellum:实例之通过按钮控制全景图
- 网络_Wake-on-Lan(WoL)软件推荐, 让你不在局域网也能实现网络唤醒
- 论文评析-Incremental Boosting Convolutional Neural Network for Facial Action Unit Recognition,NIPS, 2016
- catkin_make和cmake
- 高净值人群依靠什么可以挣那么多钱?
- python 验证码
- hdu 4155 回溯
- 高斯滤波程序编写 opencv C++ CSU
- 【pytorch】(断点)继续上次训练