Android touch冲突解决小记

2024-08-28 03:18

本文主要是介绍Android touch冲突解决小记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.ScrollView嵌套ViewPager
ViewPager横向滑动的时候容易变成上下滑动,感觉体验不好,重写ViewPager的onTouchEvent事件,当ViewPager横向滚动的距离大于纵向距离时,设置父容器不拦截滚动事件getParent().requestDisallowInterceptTouchEvent(true);
MyViewPager.java源码

public class MyViewPager extends ViewPager{// 常量区块=============================================================// 变量区块=============================================================private boolean isDealTouchEvent = true;private float point_down_x;private float point_down_y;// 构造函数区块===========================================================public MyViewPager(Context context) {super(context);// TODO Auto-generated constructor stub}public MyViewPager(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}// 方法区块===========================================================public void setDealTouchEvent(boolean is) {isDealTouchEvent = is;}@Overridepublic boolean onTouchEvent(MotionEvent ev) {float point_x = ev.getX();float point_y = ev.getY();switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:point_down_x = point_x;point_down_y = point_y;break;case MotionEvent.ACTION_MOVE:if (isDealTouchEvent) {if (Math.abs(point_x - point_down_x) > Math.abs(point_y - point_down_y)) {getParent().requestDisallowInterceptTouchEvent(true);}}break;case MotionEvent.ACTION_UP:break;default:break;}return super.onTouchEvent(ev);}// 内部接口(类)区块========================================================}

2.ScrollView嵌套ListView
第一个问题是ListView大小的问题,设置固定大小或者动态测量都可以,如果设置的高度小于ListView的全部高度并且希望ListView能够滚动,就需要知道ListView滚动到顶和到底的事件,然后在未到顶或者到底的时候设置父容器不屏蔽滑动事件。
MyListView.java 源码

public class MyListView extends ListView {// 常量区块=============================================================// 变量区块=============================================================private boolean isDealTouchEvent = true;// 构造函数区块===========================================================public MyListView(Context context) {super(context);// TODO Auto-generated constructor stub}public MyListView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}// 方法区块===========================================================public void setDealTouchEvent(boolean is) {isDealTouchEvent = is;}@Overridepublic boolean onTouchEvent(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:if (isDealTouchEvent) {getParent().requestDisallowInterceptTouchEvent(true);}break;case MotionEvent.ACTION_MOVE:break;case MotionEvent.ACTION_UP:break;default:break;}return super.onTouchEvent(ev);}@Overrideprotected void onOverScrolled(int scrollX, int scrollY, boolean clampedX,boolean clampedY) {// TODO Auto-generated method stubif (isDealTouchEvent) {if (scrollX == 0 && scrollY == 0) {/*if (getFirstVisiblePosition() == 0) { // 到顶} else { // 到底}*/getParent().requestDisallowInterceptTouchEvent(false);}}super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);}// 内部接口(类)区块========================================================}

附件Demo地址:ScrollView嵌套ViewPager和ListView
ScrollView嵌套ViewPager,ViewPager横向滑动时容易上下滚动处理; ScrollView嵌套ListView,ListView滚动事件处理,可滚动;
ScrollView子控件获取焦点后自动置顶问题处理。
ListView滚动到顶或到底事件监听。

这篇关于Android touch冲突解决小记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113575

相关文章

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip