Android listview的滑动冲突解决方法

在Android开发的过程中,有时候会遇到子控件和父控件都要滑动的情况,尤其是当子控件为listview的时候。就比如在一个ScrollView里有一个listview,这种情况较常见,就会出现这种滑动冲突的情况。这种情况也比较常见,有时候就是这样,没法,但是,了解事件分发的我们知道应该怎么处理这样的事情
有两点需要注意:
一般来说,view的onTouchEvent返回true,即消耗点击事件,viewgroup的onInterceptTouchEvent返回false,即不拦截点击事件,这一点从android源码中可以看出来。但是listview的父类AbsListView重写了onInterceptTouchEvent,返回了true,注意这里不是一定返回true,但是我觉得这一点可以先忽略。
onTouchEvent和onInterceptTouchEvent的调用顺序。点击事件从父控件向子控件传递,如果父控件不拦截,则交由子控件拦截,如果父控件拦截了,则交由父控件的onTouchEvent处理,如果最终处理点击事件的控件的onTouchEvent返回了false,则将会直接调用其父控件的onTouchEvent,如此向上类推
其实解决方法也很简单:重写父控件的onInterceptTouchEvent函数,在move的时候根据需要返回true,比如左右滑动返回true,其他情况均返回false。这样,当左右滑动的时候,由于onInterceptTouchEvent返回了true,父控件就能处理,其他情况,事件将传递到listview中,listview自身可以处理上下滑动。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
Log.d(TAG, "onInterceptTouchEvent-slop:"+mTouchSlop);
final int action = ev.getAction();
if ((action == MotionEvent.ACTION_MOVE) && (mTouchState != TOUCH_STATE_REST))
{
return true;
}
final float x = ev.getX();
final float y = ev.getY();
switch (action)
{
case MotionEvent.ACTION_MOVE:
final int xDiff = (int)Math.abs(mLastMotionX-x);
if (xDiff>mTouchSlop)
{
mTouchState = TOUCH_STATE_SCROLLING;
}
break;
case MotionEvent.ACTION_DOWN:
mLastMotionX = x;
mLastMotionY = y;
mTouchState = mScroller.isFinished()? TOUCH_STATE_REST : TOUCH_STATE_SCROLLING;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
mTouchState = TOUCH_STATE_REST;
break;
}
return mTouchState != TOUCH_STATE_REST;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# listview的滑动冲突解决
# Android
# listview冲突解决
# 浅谈Android View滑动冲突的解决方法
# android多种滑动冲突的解决方案
# Android下拉刷新与轮播图滑动冲突解决方案
# Android滑动冲突的完美解决
# 浅谈Android实践之ScrollView中滑动冲突处理解决方案
# Android中RecyclerView嵌套滑动冲突解决的代码片段
# android中view手势滑动冲突的解决方法
# Android滑动冲突的完美解决方案
# Android App中ViewPager所带来的滑动冲突问题解决方法
# Android中DrawerLayout+ViewPager滑动冲突的解决方法
# 这种情况
# 解决方法
# 就会
# 我觉得
# 尤其是
# 都要
# 就能
# 也很
# 希望能
# 写了
# 重写
# 可以看出
# 谢谢大家
# 如在
# 需要注意
# 就比
# 则将
# 其父
# 过程中
# 怎么处理
相关文章:
历史网站制作软件,华为如何找回被删除的网站?
C++如何编写函数模板?(泛型编程入门)
公司门户网站制作流程,华为官网怎么做?
大连网站设计制作招聘信息,大连投诉网站有哪些?
建站主机如何选?性能与价格怎样平衡?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
制作销售网站教学视频,销售网站有哪些?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
怎么将XML数据可视化 D3.js加载XML
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
建站VPS推荐:2025年高性能服务器配置指南
实惠建站价格推荐:2025年高性价比自助建站套餐解析
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何通过VPS建站实现广告与增值服务盈利?
安徽网站建设与外贸建站服务专业定制方案
建站主机服务器选型指南与性能优化方案解析
c# 在ASP.NET Core中管理和取消后台任务
建站之星后台密码如何安全设置与找回?
已有域名如何快速搭建专属网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何在阿里云完成域名注册与建站?
宁波自助建站系统如何快速打造专业企业网站?
如何生成腾讯云建站专用兑换码?
html制作网站的步骤有哪些,iapp如何添加网页?
建站主机SSH密钥生成步骤及常见问题解答?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站之星后台管理:高效配置与模板优化提升用户体验
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何快速搭建FTP站点实现文件共享?
智能起名网站制作软件有哪些,制作logo的软件?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
广德云建站网站建设方案与建站流程优化指南
教学论文网站制作软件有哪些,写论文用什么软件
?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
建站ABC备案流程中有哪些关键注意事项?
网站制作公司排行榜,抖音怎样做个人官方网站
如何挑选优质建站一级代理提升网站排名?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何在IIS7中新建站点?详细步骤解析
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
手机网站制作与建设方案,手机网站如何建设?
如何在橙子建站中快速调整背景颜色?
七夕网站制作视频,七夕大促活动怎么报名?
学校为何禁止电信移动建设网站?
山东网站制作公司有哪些,山东大源集团官网?
*请认真填写需求信息,我们会在24小时内与您取得联系。