全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android listview的滑动冲突解决方法

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小时内与您取得联系。