公司最近需要开发安卓,没多少时间系统学习,安卓算是半路出家。
昨天开发中遇到一个onTouch相关的问题,onTouch可以有两个参数,一个是View,一个是MotionEvent,View表示受到Touch事件的view对象,MotionEvent包含的事件的详细信息,例如触摸点的信息,触摸事件类型的信息等。MotionEvent有几个属性需要注意,分别如下:
1.ACTION_DOWN:表示按下了屏幕,是第一个执行也是按下之后必然执行的方法。
2.ACTION_MOVE:表示为移动手势,会不停的执行直到触摸结束。
3.ACTION_UP :表示离开屏幕,触摸停止的时候执行。
4.ACTION_CANCEL:表示取消手势,由系统产生的。
总结:1个ACTION_DOWN+多个ACTION_MOVE+1个ACTION_UP=onTouch。
onTouch方法返回的是一个boolean类型的值,该值如果为true,表示处理完成,不会传递给下一个对象,也就是说后面的控件或对象就不会接收到该触摸事件了。若返回值为false,则触摸事件对后面的控件或对象仍有效。
昨天遇到的问题就是定义了一个全局变量,用来在某些地方控制某些环节,然后在onTouch方法中改变,代码:
可以看到buttontype是在onReceive中控制流程的,那么这样写就成了 onTouch(button=“smkw”)>onReceive(buttontype="smcp")>onTouch(button="smkw")
可以看到ontouch执行了两次,一次按下,一次松开,然后buttontype还是原来的,对后面的工作肯定有影响,改为:
分别在该手势的事件中处理,问题就解决了,当然,松开的手势中其实不必再处理的,但是为保险,还是写上了。
可能问题很低级,但是还是记录一下,方便日后观看。
网友评论