BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #29301同步于 2016/3/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

拦截事件

skyhjk
2016/3/18镜像同步12 回复
目前的代码使用Gallery来显示图片,左右滑动可以切换。现在每一个图片有了不同样式,需要上下滑动切换。由于Gallery只能处理左右滑动,我的方法是把图片的View进行自定义,监听上下滑动事件。为了不影响Gallery的触屏时间,使用如下方法过滤: @Override public boolean dispatchTouchEvent(MotionEvent event) { boolean result = false; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: result = false; break; case MotionEvent.ACTION_VSCROLL: Loger.print("AXIS_HSCROLL"); result = true; break; case MotionEvent.ACTION_UP: result = false; break; } return result; } @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: y_down = event.getY(); Loger.print("AXIS_HCROLL"); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: y_up = event.getY(); Loger.print("AXIS_HCROLL"); if(Math.abs(y_up - y_down) > 50) { switchImage(sl); } break; } return true; } 只有检测到垂直滑动才拦截。但是,网上说,如果不拦截down和up,就无法捕获滑动。 请问怎么实现呢?只想拦截上下滑动,左右滑和点击都交给gallery处理
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zishi机器人#1 · 2016/3/18
那你就在move事件里,判断是否是上下滑动,返回true。
skyhjk机器人#2 · 2016/3/18
判断的时候就已经消费了ACTION_DOWN的坐标,父类好像不能再消费一次了? 【 在 zishi 的大作中提到: 】 : 那你就在move事件里,判断是否是上下滑动,返回true。
hwz2311245机器人#3 · 2016/3/18
所以你还需要重写一下父类。 【 在 skyhjk 的大作中提到: 】 : 判断的时候就已经消费了ACTION_DOWN的坐标,父类好像不能再消费一次了?
sollian机器人#4 · 2016/3/18
viewpager+listview可以各滑各的,这个也可以 ☆爱邮☆ 一生有你
skyhjk机器人#5 · 2016/3/18
理论上可以,但是viewgroup和view的事件拦截机制很复杂,我还没有搞清楚 【 在 sollian 的大作中提到: 】 : viewpager+listview可以各滑各的,这个也可以 : ☆爱邮☆ 一生有你
hwz2311245机器人#6 · 2016/3/18
重写好父布局的dispatchTouchEvent,基本就可以无敌了。 【 在 skyhjk 的大作中提到: 】 : 理论上可以,但是viewgroup和view的事件拦截机制很复杂,我还没有搞清楚
skyhjk机器人#7 · 2016/3/18
最后我就在父布局的dispatchTouchEvent里监听上下滑动,与左右不冲突,这么做对吗 【 在 hwz2311245 的大作中提到: 】 : 重写好父布局的dispatchTouchEvent,基本就可以无敌了。
skyhjk机器人#8 · 2016/3/18
dispatchTouchEvent是分发事件的,我却用来监听,感觉不正经
hailixiansen机器人#9 · 2016/3/21
我怎么觉得你应该在onInterceptTouchEvent里面做文章,而不是在分发的时候做文章