触摸事件类MotionEvent的一些小细节

来源:互联网 发布:c语言课程考核要求 编辑:程序博客网 时间:2024/05/18 03:52

     最近在做一个小工具,用到了触摸类MotionEvent的action_DOWN,action_UP的东西,这中间有些小细节感觉跟上篇文章:                 http://blog.csdn.net/rainbowchou/article/details/49885511  有些关联,这个问题在stack overflow得到解决,同时这个问题的解决,也算是获得一个技巧了,自己记录学习一下。比较晚了,明天才开始写正题.

      一拖拖了好几天,好烦。

     这个小细节主要是来自我需要的一个需求,我需要在一个ImageView的Touch事件中实现这么一个逻辑:

     首先ImageView默认是有一张图片的,然后在触摸的时候我希望能够在改变ImageView显示图片的同时,希望能够执行一个触摸事件。

   听起来真的是非常简单的,不就是在action_DOWN,action_UP中处理一下事件,然后在点击事件中处理逻辑事件不就好了嘛?然而,但我这么做的时候,发现action_DOWN部分的逻辑可以处理,但是点击的部分却是没有执行这部分代码,这时候我就想到Android的事件拦截机制了,在这里OnTouch事件中最后是返回了false,那么这其中应该事件继续向下传递,可以执行点击事件的代码啊。

   然后就去Stack OverFlow搜索,真是个好网站,什么稀奇古怪的问题都有,恰好就有我的问题:

     当然需求不是一模一样的,在我总结之后,我的解决方案是这样的:

    

      在action_DOWN中就进行了返回true的处理,这么处理的话,说明事件已经在这消费掉了,那肯定是不能在点击事件中写逻辑了,把逻辑移动到

    action_UP中进行处理,这里最重要的一个点就是在action_DOWN中返回的那个true,如果这里没有返回true,那么action_UP中的逻辑也是没有办法进行处理的。这一点其实也不难理解:

   因为如果在action_DOWN中没有返回true的话,那么这里的事件继续传递了,那么就不会去执行接下来另一个action_UP的逻辑了,返回true那么就完成这个事件,那就可以继续接收另一个事件了。

   利用这种方法,虽然我们不能够去处理点击事件的逻辑,因为事件压根就没有传递到点击事件(onclick())中,但是在他之前的OnTouch就完成了。

  之前说过,Android这个触摸事件机制是可以层层嵌套的,那么我们可以决定在哪一层进行事件的回收以及相关操作了。

  



   Ps:我发现这个编辑器不太好用,csdn有个MarkDown编辑器,之前大概看了下官方给的教程,还挺容易的,希望自己下次的文章能够使用MrakDown来进行。

            写博客是为了希望自己能更好的学习,最近又懒了,不可取,再接再厉吧。

0 0
原创粉丝点击