变形金刚5下载android中MotionEvent.ACTION_CANCEL事件什么情况下被
触发
对于这个问题,官⽅⽂档的说明很简短,想看明⽩很难。国外⼀⽹页说的还⽐较详细,写在这⾥分享给⼤家:
原⽂是这样的:
You receive this when a parent takes posssion of the motion, for example when the ur has dragged enough across a list view or scroll view that it will start scrolling instead of letting you press the buttons inside of it.议论文的格式
广西工学院意思是这样的:
当你的⼿指(或者其它)移动屏幕的时候会触发这个事件,⽐如当你的⼿指在屏幕上拖动⼀个listView或者⼀个ScrollView⽽不是去按上⾯的按钮时会触发这个事件。
在设计设置页⾯的滑动开关时,如果不监听ACTION_CANCEL,在滑动到中间时,如果你⼿指上下移动,就是移动到开关控件之外,则此时会触发ACTION_CANCEL,⽽不是ACTION_UP,造成开关的按钮停顿在中间位置。
瞬间爆发力意思就是,当⽤户保持按下操作,并从你的控件转移到外层控件时,会触发ACTION_CANCEL,建议进⾏处理~吃什么东西对肝好
当前的⼿势被中断,不会再接收到关于它的记录。
推荐将这个事件作为 ACTION_UP 来看待,但是要区别于普通的 ACTION_UP
话说回来,平常还真碰不到这个事件,习惯上就直接当 ACTION_UP 处理了就
⼏乎所有的⾃定义控件都要⼿动处理onTouchEvent事件,我们知道,onTouchEvent⽅法返回的布尔值决定了你是否处理(消费当前事件),但是这么笼统的说其实是不准确的.准确来说,是当⼿指按下,也就是onTouchEvent接收到ACTION_DOWN事件的时候,如果返回true,那么就代表这次事件被我们处理,后来的ACTION_MOVE和ACTION_UP的返回结果是⽆所谓的. 同样的,如果在ACTION_DOWN的时候我们返回了fal,那么后来的事件也不会传到这⾥.
ACTION_CANCLE事件如何被触发?
从表象来说明就是:当触摸事件从我们的控件开始,也就是ACTION_DOWN被我们返回true处理,然后⼿指移动到当前控件的外⾯,这时候就会触发ACTION_CANCLE事件,触发cancle事件就不会接收到up事件 实际上当⼿指移动到了当前控件之外的时候,这个触摸事件被他的⽗控件拦截掉了,所以触
发了cancle事件.之后的触摸事件就再也不会传递到当前控件的onTouchEvent⾥⾯.
ACTION_CANCLE事件如何处理?
描写文笔好的成语>小动物走路儿歌关于处理,有两种办法:
图形结构
1.如果是类似滑动开关,开关随着⼿指移动,当⼿指不⼩⼼移动到开关外⾯,我们可以对cancle进⾏判断,触发cancle的时候,将⽤户未做完的动作⾃动执⾏,也就是⾃动将开关滑动到左边或者右边.具体逻辑⾃⾏处理.如果你觉得这种不太好,那么请看第⼆种完美的解决⽅案.
2.类似于⾃定义progressBar,触发cancle的时候没法进⾏⾃动处理.其实我们可以在onTouchEvent⾥⾯先调⽤
requestDisallowInterceptTouchEvent(true);,这句代码的意思就是不允许⽗控件拦截我们的触摸事件,这样action_canlce事件就永远不会被触发.问题也就不存在了.