ViewDragHelper使用时遇到的问题

今天在写一个用ViewDragHelper写一个上滑菜单的时候遇到了一个解决不了的问题。应该就是和ViewGroup的时间分发机制有关的问题。暂时想不到快捷的方法来解决这个问题。

怎么描述呢,自定义一个ViewGroup的时候,为了测量和摆放的方便,选择继承了FrameLayout,布局文件中放了两个LinearLayout。放在前面的LinearLayout是被下一个覆盖的。

android:id="@+id/cv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

>

android:id="@+id/lv"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

android:id="@+id/ll"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@drawable/a"

android:orientation="horizontal">

然后把InterceptTouchEvent()事件和onTouchEvent()事件都交给ViewDragHelper的shouldInterceptTouchEvent(ev)和processTouchEvent(event)事件去处理。可以如果这样写,上层的LinearLayout根本没机会去处理自己的滑动事件,反而给被覆盖在底下的ListView给消费了,如果InterceptTouchEvent()事件返回True,那盖在上面的LinearLayout能顺利处理自己的滑动事件,但是就算把它移走了,事件还是被CustomView给拦截了,ListView没法获得消费事件的机会。

按照View的事件分发机制,确实是这么回事,从外层的ViewGroup往里面传,如果子View是ViewGroup,继续往里传,直到遍历每个View,有消费的能力的话,就把事件给消费了,如果遍历全部的子View没有能消费的,就调用super.onDispatchTouchEvent()往上层传递,看父节点的ViewGroup的onTouchEvent()是否消费,ViewGroup是默认不拦截事件的。可是这儿ListView都没遮盖住了,相当于不可见的情况下,还是会传递过去吗?看来需要再去找找相关的资料,希望能顺利解决这个问题。

2015年9月13日21:12:25重新编辑

似乎找到问题所在了。好像在于ViewDragHelper.CallBack的clampViewPositionVertical()这个回调方法,Api文档上说,这个方法是限制子View的运动的,默认实现是不允许移动的,必须重写此方法,才能使子View在垂直方向上移动。大致理解应该是,手指拖动的View,拖动到哪个位置了,具体产生了多少偏移量,回掉的参数作为参考返回给我们,具体让我们来实现该怎么移动视图,典型的方法回掉。我没有把盖住的ViewGroup的移动禁止掉,导致ListView所在的整个ViewGroup在移动,ListView却没办法正常的滚动,在这个方法中判断掉除了我想移动的View外,ListView终于能正常滚动了。在此记下一笔,再接再厉努力学习。

android viewdraghelper 点击移动,ViewDragHelper使用时遇到的问题相关推荐

  1. android 图标点击变大,使android桌面图标变大

    在平板上android系统默认的桌面图标太小了,需要将其放大.之前在launcher中做了简单的图片放大,带 来了图标模糊的问题,重新研究源码寻求解决办法. (1)解决思路是先找到应用程序的图标等信息 ...

  2. android判断点击次数_Android应用统计-使用时长及次数统计(一)

    关键字: 应用统计 Android源码 应用使用时长 应用使用次数 最近在做有关于应用统计有关的工作,主要是统计系统中客户端应用(非系统自带的那些基础应用,比如DownLoadManager),在每一 ...

  3. Android应用统计-使用时长及次数统计(一)

    关键字: 应用统计 Android源码 应用使用时长 应用使用次数 最近在做有关于应用统计有关的工作,主要是统计系统中客户端应用(非系统自带的那些基础应用,比如DownLoadManager),在每一 ...

  4. android studio创建9.patch图片,使用时出现Error: Duplicate resources

    创建9.patch图片 右键点击需要创建9.patch图片的图片文件,选择"create 9-Patch file",然后按照需要设置. 制作好后,使用时出现Error:Dupli ...

  5. Android 11.0 系统Settings app详情页增加统计使用时长功能

    1.概述 在系统产品开发中,在app详情页展示着权限,使用缓存数据等数据,由于产品需求需要在app 详情页增加app使用时长功能的需求来查看app使用情况的功能,所以就需要统计app使用的时间了 来实 ...

  6. android 计算方法数量,如何精确计算Android应用的使用时长

    应用时长的计算友盟早期做法计算每个Activity的时长,然后全部相加就是App的使用时长.后来的做法是在客户端计算,如果应用离开小于30秒内又切回就将切走的时间也算入App的使用时长内. 本人觉得既 ...

  7. Android Scroll(四)----ViewDragHelper

    1.Google在其support库中为我们提供了DrawerLayout和SlidingPaneLayout两个布局来帮助开发者实现侧边栏滑动的效果.但是在这两个布局的背后,却隐藏着一个功能强大的类 ...

  8. android tab 点击,TabLayout.Tab点击事件

    1,大家都知道 android.support.design.widget.TabLayout 中的TabLayout并没有点击事件 只有addOnTabSelectedListener这个选中监听, ...

  9. 有没搞错?Java 对象不使用时要赋值为 null?

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 许多Java开发者都曾听说过"不使用的对象应手动赋 ...

最新文章

  1. 联想G480类似没有小键盘开关的机器
  2. strcat()函数常见问题
  3. Java虚拟机详解(五)------JVM参数(持续更新)
  4. 简单的html渲染模板引擎
  5. 手机热点总是正在连接服务器,手机热点用不了?可以尝试这个方法。
  6. 引路蜂地图API:Gis.Navigation包定义
  7. springmvc php,SpringMVC 常用注解
  8. android 字体像素转换工具类_android px,dp,sp大小转换工具
  9. C语言求解100的带分数形式的代码
  10. Access更新查询(更新员工姓名)
  11. svn服务器设置忽略文件夹,如何使用SVN忽略目录?
  12. 【微信授权登录失败】Universal Link check failed 第5步问题解决(授权二次确认弹框问题)
  13. kron matlab_MATLAB中kron命令有什么用途
  14. CF1076C Meme Problem(韦达定理)
  15. 2022陈箫箫胡程灿信息论课程作业 MIMO信道(multi-input multi-output,MIMO)简介
  16. java netcdf精度_NetCDF 介绍
  17. DataGridView控件数据导出表格
  18. Python之signal模块详解
  19. ICLR 2022:​PiCO,基于对比消歧的偏标签学习 丨AI Drive
  20. 《调色师手册:电影和视频调色专业技法(第2版)》——布置调色工作间

热门文章

  1. oracle中主键的建立,oracle 建立主键与索引
  2. java aop注解日志记录_springMVC自定义注解,用AOP来实现日志记录的方法
  3. android文件管理器编写,Android编写文件浏览器简单实现
  4. 函数的梯度方向和切线方向_梯度是函数变化最快的方向
  5. php显示地址栏携带的错误信息_php-fpm搭建及加固
  6. 康博(COMPUWARE)软件公司简介
  7. Spring 通知和顾问进行增强
  8. iptables(3)
  9. ESLint检测JavaScript代码
  10. WorkSbell第10周2017