今天来跟大家聊聊我是咋折腾这个 MotionEvent 的。起初,我对这玩意儿完全没概念,只知道它是用来处理用户触摸屏幕的事件的。但是具体咋用,我是一头雾水。
于是我就开始动手实践。我先弄明白一件事,当用户触摸屏幕时,就会创建一个 MontionEvent 对象,这个对象里头包含关于发生触摸的位置、时间信息,还有一些其他的细节,都是些很重要的信息。然后,我发现这个 MotionEvent 主要是用来处理各种设备的输入事件的,像鼠标、笔、手指、轨迹球等等,但我平时用的最多的就是手指触摸屏幕,所以其他的我就没怎么细研究。
在研究 View 和 ViewGroup 的触摸事件时,我逐渐熟悉 MotionEvent 类,它就像是一个记录员,记录着我手指在屏幕上的各种动作,比如按下、移动、抬起等等,都有记录。然后我还发现一点,要想让 UI 控件监听运动事件,得让这个控件成为第一响应者,当然对于 UIViewController 视图控制器和 UIAPPlication 来说,就没这个要求。
我又深入解一下事件类型,也就是 MotionEvent 对象所代表的动作。比如说,我在屏幕上滑动一下手指,这个动作就会被 MotionEvent 记录下来,并生成一个对应的事件类型,还是挺有意思的。
后来我发现,MotionEvent 还有一个注释,上面写着它是一个用来报告移动事件的对象,覆盖的输入源比 pointer 类型要多。我当时就在想,这不就说明,MotionEvent 不只是能处理手指触摸,还能处理其他类型的输入设备吗?虽然这对我来说用处不是很大,但我还是解一下,毕竟技多不压身嘛
我重点研究一下 MotionEvent 中与触摸事件发生位置相关的函数:getX() 和 getY()。通过这两个函数,我可以获取到触摸事件发生位置的 x 和 y 坐标值,这些坐标值是相对的,也就是说,它们是相对于某个控件的左上角的。这一点很重要,因为在实际开发中,我们经常需要知道用户触摸的具体位置,来进行一些相应的操作。
- 总结一下我的实践过程:
- 开始动手:从零开始解 MotionEvent 的概念和作用。
- 初步解:弄明白 MotionEvent 对象包含的信息和主要用途。
- 逐渐熟悉:在研究 View 和 ViewGroup 的触摸事件时,掌握 MotionEvent 类的使用。
- 深入解:理解事件类型的概念,以及 MotionEvent 对象所代表的动作。
- 扩展解:查看 MotionEvent 的注释,解它可以处理的输入源。
- 重点研究:掌握 getX() 和 getY() 函数的使用,获取触摸事件发生位置的坐标值。
经过这一番折腾,我对 MotionEvent 的理解也算是更上一层楼。虽然过程有些枯燥,但收获还是挺大的。我现在已经能熟练地使用 MotionEvent 来处理各种触摸事件,感觉自己又进步不少!