【安卓】给gallery内"控件"挂载事件,滑动后抬起手指时也触发事件(滑动时不应触发)的解决、!
来源:互联网 发布:微信密码查询软件 编辑:程序博客网 时间:2024/05/21 08:45
思路:
1.gallery内控件挂载事件(如:onClickListener)的方法类似listview,可直接在baseAdapter.getView内给控件挂载(具体方法百度)。
2.貌似没问题,但滑动后(手指在挂载了事件的控件上)抬起手指时仍会触发事件,这是不对的。
解决方法时,若为滑动(x有偏移),则在gallery.onInterceptTouchEvent中拦截事件,子控件自然接受不到事件。
注:1>不能简单的判断x有偏移就拦截,有些设备犯贱,即使原地抬起也有可能有偏移,此时本应触发onClick却也被拦截掉了。所以为兼容大多数机器,需水平移动超过一定阈值时再拦截。所以在阈值范围内,gallery是不动的。
3.问题又来了,缓慢滑动第2项时,会发现"子项"有明显的突变(x坐标突变)。基本原因是看似滑动超过阈值后,gallery才开始正常移动,其实在手开始移动时(gallery尚未移动时),gallery也做了一些初始化,导致gallery真正移动时存在误差。
解决方法时,在阈值内滑动手指时,不断做这种初始化,这样在gallery真正开始运动时,初始化就没有误差了。
public class MyGallery extends Gallery {float mLastMotionX = 0;public MyGallery(Context context) {super(context);// TODO Auto-generated constructor stub}public MyGallery(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public MyGallery(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {final int action = ev.getAction();final float x = ev.getX();switch (action) {case MotionEvent.ACTION_MOVE:final int xDiff = (int) Math.abs(x - mLastMotionX);if (xDiff >50) {return true;}break;case MotionEvent.ACTION_DOWN:mLastMotionX = x;//防止滑动"第2项"时,发生突变onTouchEvent(ev);break;}return false;}}
78 0
- 【安卓】给gallery内"控件"挂载事件,滑动后抬起手指时也触发事件(滑动时不应触发)的解决、!
- UISlider小范围滑动不能触发抬起事件的BUG
- 解决Gallery滑动中不触发setOnItemSelectedListener事件
- 解决滑动时不触发touchend事件的bug
- ListView滑动触发addTextChangedListener事件
- 解决NestedScrollView中,在子View上滑动不触发滚动事件,却触发点击事件
- 解决IOS滑动触发Body的滑动
- 自学笔记:安卓,手指滑动事件示例
- Jquery滑动至底部触发事件
- 滑动窗口滚动条触发事件
- iscroll4中滑动页面触发点击事件
- 使用iscroll滑动区域内的div onclick事件单击一次触发了两次问题的解决
- 安卓的滑动事件
- js判断左右上下滑动触发的事件
- iscroll滑动区域内的div onclick事件单击一次触发了两次bug解决
- css 滚动条滑动到底部时触发事件
- 解决Gallery滑动中不触发setOnItem…
- 安卓开发——问题:ListView的item长按事件触发后接着触发点击事件
- iptables中snat和MASQUERADE的区别
- AMD发布开源异构系统架构的linux内核驱动
- unix下使用共享内存实现进程间通信
- 哪三个本科专业最难就业(图)?
- Linked List Cycle I&&II
- 【安卓】给gallery内"控件"挂载事件,滑动后抬起手指时也触发事件(滑动时不应触发)的解决、!
- poj1007DNA Sorting
- NYOJ-14 会场安排问题
- c语言打印菱形
- 用python做自动化测试--对Java代码做单元测试 (1)
- EasyUI combox实现联动
- 【BZOJ】【P3117】【NOI1999】【内存分配】【题解】
- CentOS 6.5 PYPI本地源制作
- Bug无法启动