城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

Android点击事件详解(干货教学)

11月19日 程染筱投稿
  一、简介
  首先我们知道touch事件主要是是在三个方法中传递和处理的。分别是:dispatchTouchEvent事件分发onInterceptTouchEvent事件拦截onTouchEvent事件处理
  其中事件拦截的方法只在VeiwGroup中有,Activity和View中都没有,而事件的传递遵循从上到下分发拦截。而处理则是从内到外的反馈过程,然后在从外到内的分发完成,最后在处理层调用onTouchEvent的ACTIONUP至此,事件的分发和处理走完。这里大家先有一个印象,后面还会详细讲解。二、页面布局
  如上图页面所示:主要包含TouchNormalActivity,注意这个activity要继承系统自带AppCompatActivity或者其他,不要继承自己封装的Activity,有可能你封装的时候做了处理,自己不知道,会出现事件传递不准确的情况。页面包含三层:TouchNormalActivityNormalViewGroupNormalView三、事件处理onTouchEvent。ACTIONDOWN
  下面事件处理只有DOWN事件的日志1)、三层都不处理touch事件
  三层都不处理,按照系统默认处理来进行日志如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNNormalViewGroup〔onTouchEvent,88〕:ACTIONDOWNTouchNormalActivity〔onTouchEvent,56〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPTouchNormalActivity〔onTouchEvent,63〕:ACTIONUP
  我们可以看到遵循我们在简介中说的情况。2)、View层消费touch事件
  这里主要指在最内层处理了点击事件可以是该View实现了OnClickListener接口,也可以是在onTouchEvent里面返回了true。日志如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalView〔dispatchTouchEvent,70〕:ACTIONUPNormalView〔onTouchEvent,96〕:ACTIONUP
  从日志我们可以看到,当内层View消费掉点击事件的时候,就不会在调用super。onTouchEvent(event);去询问父View是否要处理该事件。跟1)相比少了一个,从内到外反馈询问是否处理点击事件的过程。
  因为内层View已经处理了点击事件,这个时候我们可以认为本地点击事件已经分发完毕,从日志我们可以清楚的看到有一个从外到内通知事件分发完毕的过程,一直到处理事件层的dispatchTouchEvent。ACTIONUP。表示事件分发到这一层完毕,然后才会去执行onTouchEvent的UP事件,至此表示该事件处理完毕。3)、ViewGroup层消费touch事件
  首先我们必须明白的一件事是,事件的分发是从外到内的过程,但是事件的处理是从内到外的过程,手指点击到屏幕,虽然是在最外层,但是事件处理的时候。要优先询问最内层的是否处理,然后在往外层一层一层的询问,这样才能保证事件处理不会乱。
  这里再次重复说这个,是因为想让大家看清楚view层和viewgroup层处理日志的不同
  日志如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNNormalViewGroup〔onTouchEvent,88〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onTouchEvent,95〕:ACTIONUP
  正如上面说的,虽然我们是在ViewGroup消费掉了点击事件,但是发现View层也是可以接收到ACTIONDOWN然后再往外反馈的。4)、Activity层消费touch事件
  经过了Viewgroup层的讲述,相信activity层大家已经能猜到了日志如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNNormalViewGroup〔onTouchEvent,88〕:ACTIONDOWNTouchNormalActivity〔onTouchEvent,56〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPTouchNormalActivity〔onTouchEvent,63〕:ACTIONUP
  我们会发现这个日志和三层都不处理的日志是一样的。因为已经到了最上层,你不处理谁处理。所以日志一样。四、事件处理onTouchEvent。ACTIONMOVE
  我们发现MOVE事件的前期过程和DOWN事件一样,只不过在down到事件消费层的时候。开始从外网内再次分发了一个MOVE事件。然后在UP的时候和DOWN是一样的。1)、三层都不处理touch事件,此时的MOVE
  三层都不处理,按照系统默认处理来进行日志如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNNormalViewGroup〔onTouchEvent,88〕:ACTIONDOWNTouchNormalActivity〔onTouchEvent,56〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,33〕:ACTIONMOVETouchNormalActivity〔onTouchEvent,60〕:ACTIONMOVETouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPTouchNormalActivity〔onTouchEvent,63〕:ACTIONUP
  我们能够看到。MOVE事件,是在ACTIONDOWN事件传递和处理完毕以后才进行MOVE处理的。这个时候已经能够确定那一层来消费touchEvent事件了。所以就再次来分发事件,因为已经能确定在Activity层处理事件了。就不会往内层分发,直接分发完,在该层的onTouchEvent中进行处理了。2)、View处理touch事件,此时的MOVETouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,33〕:ACTIONMOVENormalViewGroup〔dispatchTouchEvent,39〕:ACTIONMOVENormalViewGroup〔onInterceptTouchEvent,65〕:ACTIONMOVENormalView〔dispatchTouchEvent,67〕:ACTIONMOVENormalView〔onTouchEvent,93〕:ACTIONMOVETouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onInterceptTouchEvent,69〕:ACTIONUPNormalView〔dispatchTouchEvent,70〕:ACTIONUPNormalView〔onTouchEvent,96〕:ACTIONUP
  我们发现这个过程其实和Down是一样的,只不过多了一个Move的一个分发和处理五、事件拦截onInterceptTouchEvent1)、ViewGroup中做事件拦截,各层都不处理事件
  这个拦截没有细分,直接在onInterceptTouchEvent中返回true了。ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalViewGroup〔onTouchEvent,88〕:ACTIONDOWNTouchNormalActivity〔onTouchEvent,56〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPTouchNormalActivity〔onTouchEvent,63〕:ACTIONUP
  因为ViewGroup做了拦截,在内层View中根本就接受不到事件。
  这个时候想一下MOVE事件的情况,因为ViewGroup虽然拦截了,但是并没有处理事件,所以还需要网上反馈,最终在最上层做处理。所以此时的MOVE只会在最上层(activity)的dispatchTouchEvent和onTouchEvent中执行。2)、ViewGroup中做事件拦截,并在ViewGroup中处理事件ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalViewGroup〔onTouchEvent,88〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onTouchEvent,95〕:ACTIONUP
  我们能看到。拦截只是不往内层传递,其他的都还是一样的。
  但是区别在于MOVE事件。首先拦截以后就会直接走当前层的onTouchEvent方法。如果我们不处理,就会向上反馈,MOVE的时候就会在上层MOVE
  如果在ViewGroup中消费点击事件,那么在MOVE的时候是在ViewGroup中MOVE,分发完DOWN事件以后再次有外网内进行分发MOVE事件。3)、ViewGroup中做MOVE事件拦截
  首先我们必须知道一点,MOVE事件是,你那一层要消费那一次才能得到MOVE的分发。如果我们都没有去处理DOWN事件,那么我们在MOVE的时候,ViewGroup和View是得不到MOVE事件的。
  因此,我们在ViewGroup做MOVE拦截,就必须保障ViewGroup的内层View要消费点击事件。
  因为我们只拦截了MOVE事件,所以DOWN事件的日志和DOWN三层都不处理的日志是一样的。MOVEahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,33〕:ACTIONMOVENormalViewGroup〔dispatchTouchEvent,39〕:ACTIONMOVENormalViewGroup〔onInterceptTouchEvent,65〕:ACTIONMOVENormalView〔dispatchTouchEvent,74〕:ACTIONCANCELNormalView〔onTouchEvent,100〕:ACTIONCANCELTouchNormalActivity〔dispatchTouchEvent,33〕:ACTIONMOVENormalViewGroup〔dispatchTouchEvent,39〕:ACTIONMOVENormalViewGroup〔onTouchEvent,92〕:ACTIONMOVETouchNormalActivity〔onTouchEvent,60〕:ACTIONMOVETouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onTouchEvent,95〕:ACTIONUPTouchNormalActivity〔onTouchEvent,63〕:ACTIONUP
  从日志中我们可以看到。主要分为四段,第一段是Down事件的处理,因为拦截的是move所以,down还是能进入到最底层View并且消费掉事件,然后开始进行MOVE,因为最底层View消费掉事件,道理上MOVE应该是可以分发到View层的,但是因为在上层的Viewgroup做了拦截,我们能够看到在View层的dispatchTouchEvent和onTouchEvent给到的状态是ACTIONCANCEL就是取消当前View事件的处理,然后再次重新分发MOVE事件。同事因为做了拦截,所以onInterceptTouchEvent不执行。4)、ViewGroup中做UP事件拦截
  本来觉得UP事件拦截有什么好做的,没什么用。后来试了下,发现也有点意思。
  我们在View层添加了onClick方法。并在Viewgroup做UP拦截。不拦截ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:NormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onInterceptTouchEvent,69〕:ACTIONUPNormalView〔dispatchTouchEvent,70〕:ACTIONUPNormalView〔onTouchEvent,96〕:ACTIONUPNormalView1〔onClick,47〕:onClick:
  这是一个正常在View消费事件的日志,并且答应了onClick日志。拦截ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onInterceptTouchEvent,69〕:ACTIONUPNormalView〔dispatchTouchEvent,74〕:ACTIONCANCELNormalView〔onTouchEvent,100〕:ACTIONCANCEL
  从日志我们可以看到,在执行到ViewGroup的onInterceptTouchEvent的UP事件以后,后面的变成ACTIONCANCEL事件了。
  因为我们做了分发的拦截,系统可以认为该事件不需要在往下分发了。或者认为分发失败。然后去调用CANCEL来通知下层。该事件重置或者取消了。六、事件分发dispatchTouchEvent1)、View层做事件分发拦截
  在View层添加了onClick事件,但是在View层的dispatchTouchEvent。ACTIONDOWN返回trueahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onInterceptTouchEvent,69〕:ACTIONUPNormalView〔dispatchTouchEvent,70〕:ACTIONUPNormalView〔onTouchEvent,96〕:ACTIONUP
  onClick没有执行。
  在View层的dispatchTouchEvent。ACTIONDOWN返回true以后,就没有走View的onTouchEvent了。会认为事件在分发的时候已经完成,然后从外到内走分发完成的过程。
  在View层添加了onClick事件,但是在View层的dispatchTouchEvent。ACTIONUP返回trueahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onInterceptTouchEvent,69〕:ACTIONUPNormalView〔dispatchTouchEvent,70〕:ACTIONUP
  跟我想象中的还是有点出入的,onClick不执行是肯定的。我以为会调用ACTIONCANCEL结果并没有。
  只是比正常流程少了一步onTouchEvent。ACTIONUP而导致onClick不执行。2)、ViewGroup层做事件分发拦截
  在View层添加了onClick事件,但是在ViewGroup层的dispatchTouchEvent。ACTIONDOWN返回trueahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onTouchEvent,95〕:ACTIONUPTouchNormalActivity〔onTouchEvent,64〕:ACTIONUP
  onClick没有执行。
  在ViewGroup层的dispatchTouchEvent。ACTIONDOWN返回true以后,就会认为在ViewGroup分发完成,然后在由外到内去调用分发的up事件。但是我们会发现一个很奇怪的现象,就是ViewGroup层的onTouchEvent。down事件因为在分发的down中被返回,所以并没有执行,但是他的up事件却执行了。并且因为Viewgroup并没有处理事件,up事件还向上反馈了。
  在View层添加了onClick事件,但是在ViewGroup层的dispatchTouchEvent。ACTIONUP返回trueahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUP
  在ViewGroup的dispatchTouchEvent。ACTIONUP以后的都不执行了。所以造成onClick也不会执行。3)、Activity层做事件分发拦截
  在View层添加了onClick事件,但是在Activity层的dispatchTouchEvent。ACTIONDOWN返回trueahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPTouchNormalActivity〔onTouchEvent,64〕:ACTIONUP
  onClick没有执行。
  对比ViewGroup一目了然
  在View层添加了onClick事件,但是在Activity层的dispatchTouchEvent。ACTIONUP返回trueahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,46〕:ACTIONCANCELNormalViewGroup〔onInterceptTouchEvent,73〕:ACTIONCANCELNormalView〔dispatchTouchEvent,74〕:ACTIONCANCELNormalView〔onTouchEvent,100〕:ACTIONCANCELNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUP
  onClick不执行
  同时这个日志很奇特,我们在Activity的分发UP中返回true,我以为回像Viewgroup那样down事件向下传递,然后后面的不执行分发的up,没想到打印出的日志竟然是这样的。
  从日志我们可以看出来先从上到下执行了一次Cancel,然后在执行了了一遍down,然后在Activity层的up事件终止。(这里我也不是很明白,带后续研究)总结:
  在分发的down和up分别做处理,我们能看出来的是,如果在down中处理,其实就等于在上层做了拦截,但是如果实在up中做处理,事件还是能进入到最底层View中的。
  还有就是在分发的时候MOVE事件的处理情况,有兴趣的同学可以看一下,记住MOVE的处理层级是在down层级的。记住这一点,就能很快知道MOVE可以深入到那一层。七、setOnTouchListener
  给View设置setOnTouchListener和setOnClickListener
  日志如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,65〕:ACTIONDOWNNormalView2〔onTouch,55〕:onTouchNormalView〔onTouchEvent,91〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onInterceptTouchEvent,69〕:ACTIONUPNormalView〔dispatchTouchEvent,72〕:ACTIONUPNormalView〔onTouch,55〕:onTouchNormalView〔onTouchEvent,98〕:ACTIONUPNormalView〔onClick,49〕:onClick
  我们能看到onTouchListener优先于onClick执行,先于onTouchEvent执行。
  setOnTouchListener返回true的时候ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,65〕:ACTIONDOWNNormalView〔onTouch,55〕:onTouchTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onInterceptTouchEvent,69〕:ACTIONUPNormalView〔dispatchTouchEvent,72〕:ACTIONUPNormalView〔onTouch,55〕:onTouch
  从日志我们看到,因为onTouch是优先于onClick执行的,当onTouch返回true的时候,事件就没有传递到View层的onTouchEvent。ACTIONDOWN中。所以onClick并没有执行。八、setOnClickListener
  在View添加onClick事件,日志如下:TouchNormalActivity〔dispatchTouchEvent,29〕:ACTIONDOWNNormalViewGroup〔dispatchTouchEvent,35〕:ACTIONDOWNNormalViewGroup〔onInterceptTouchEvent,61〕:ACTIONDOWNNormalView〔dispatchTouchEvent,63〕:ACTIONDOWNNormalView〔onTouchEvent,89〕:ACTIONDOWNTouchNormalActivity〔dispatchTouchEvent,37〕:ACTIONUPNormalViewGroup〔dispatchTouchEvent,42〕:ACTIONUPNormalViewGroup〔onInterceptTouchEvent,69〕:ACTIONUPNormalView〔dispatchTouchEvent,70〕:ACTIONUPNormalView〔onTouchEvent,96〕:ACTIONUPNormalView1〔onClick,47〕:onClick
  我们可以看到onClick执行是在View层的onTouchEvent。ACTIONUP以后执行的,此时如果我们在View层的dispatchTouchEvent。ACTIONUP或者onTouchEvent。ACTIONUP直接返回true,都会导致onClick不会执行。
  以上就是Android点击事件处理,更多Android核心技术学习可以私信:手册直达领取。九、总结
  以上就是Touch事件的传递和拦截过程。看起来有一些枯燥,其实自己跟一遍流程,还有有些感悟和收获的。
  首先我们要记住,事件的传递流程是分发拦截处理。
  具体过程为,我们点击一个屏幕的时候,肯定是外部最先接触到点击事件,但是为了保证内部能处理到事件,所以我们需要一个从内到外反馈的过程,因为事件是先从外到内分发和拦截down事件,然后到达最内层View的onTouchEvent处理事件,然后在从内到外来进行反馈,那一层要处理该事件。
  当该层要处理down事件以后。在从外到内来分发和拦截up事件,到处理层的onTouchEvent。ACTIONUP终止。
  同时呢,MOVE事件是在down的处理层进行的。先进行down处理,进入到处理层级,然后从外到内传递MOVE。如果内层都不做处理,那么就只有在外层的分发和处理里面才有MOVE回调。
  文章转载:https:www。likecs。comshow203536384。html
投诉 评论 转载

北海将有两大高端的奥特莱斯,以后购物会不会有选择困难症?近日,一个高端购物品牌正式宣布进驻北海市,这就是中意奥莱品牌,将入驻北海国际康乐旅游港。从相关报道来看,中意奥莱预计进驻品牌达到160180个,包括奢侈品、美妆、运动休闲、潮牌……这菜被誉为皇帝菜,秋冬季遇到可别手软,清脆爽口出锅就光盘每到每年的秋冬季节都会有一种香脆的蔬菜上市了,这一种香脆的蔬菜有些人喜欢,有些人光是闻到味道都觉得难受,但其实这一种青菜在古代也有着皇帝菜的称号,那是因为茼蒿当中自带清气以及菊……拥有知己,沐爱前行谁会相信你永含着的对恋主的忧愁?谁会在意你峥嵘的栉比是风雨的化身与结晶?只要你曾经有堕落以及消极的思想存在如郭沫若,你就是个小人。这种观点是不可取的。郭沫若同志说:越有历史者人……40!苹果遮羞布被扯下,央媒的呼吁起作用了华为在智能手机市场原本是苹果最有力的竞争对手,凭借着海思自研的高端麒麟芯片,华为在两年前就一度超越了苹果。但由于老美的打压,麒麟芯片无奈沦为了绝唱,华为手机业务也因此而一落千丈……安徽芜湖低调富豪封全虎发家史37岁创业大器晚成,如今身价15前言:对于普通人来说,学习成功人士的发家之道从而掌握财富密码是一条切实可行的道路,正所谓站在巨人的肩膀之上才能够看得更远,我们研究了数百位亿万富翁的创业故事之后,发现他们……不是你差,只是你不敢生活不断地打击你,导致你认为这是你完全没有办法,并不是真的没有办法,而是生活持续的打击,使你觉得这个是没有办法,所以你要改变你的心理状况,不是要改变外在的事物,而是要改变你对这……Android点击事件详解(干货教学)一、简介首先我们知道touch事件主要是是在三个方法中传递和处理的。分别是:dispatchTouchEvent事件分发onInterceptTouchEvent事件拦截……最大续航里程接近490km,这4款纯电轻卡帮你解决里程焦虑【卡车之家原创】无论是政策导向抑或是市场大方向,城配运输车辆都开始向着新能源产品所倾斜。去年8月18日,郑州市人民政府也发布了关于印发《郑州市城市绿色货运配送示范工程实施方案》……直播预告云端品盛宴!第五届保定市文旅大会精彩不断第五届保定市文化和旅游产业发展大会将于2022年9月7日至8日采取线下线上相结合的方式在徐水区、清苑区举办。9月7日晚17时至18时,大会开幕式将全程直播。9月8日,促产……7位长相坏人的女星,熊黛林被说恶毒少奶奶,杨雪江玉燕深入人心在一些影视剧中,很多反派让人印象深刻,一方面是演员演技较好,演得很令人讨厌,另一方面,是跟有些演员长相相关,他们似乎天生长了一张坏人脸。一些女星就是这样,长相一看就像是坏人。……批比赛服露骨就不专业?专业可不是低俗作秀的挡箭牌铁人三项女运动员比赛服被批不得体现在,社会上有种不好的现象,就是社会公众但凡有对于某件事物的批评及反对意见,一些所谓的专业人士动辄就给公众扣上不专业的大帽子,毫不嘴软地反击甚至……不吹不黑,华为nova10Pro使用了4个月,说一下使用感受总是有人拿华为手机与其它手机对比,说华为手机低配高价,而且还不支持5G。然后又说,其它手机,比如小米手机,尤其是小米的红米手机,性价比高,高配低价。我想说,华为手机虽然在……
马克西的巨星像高质量纪录片圆桌派的100条建议,建议收藏一份平平无奇的早餐食谱,竟让孩子们平均长高10厘米?大量玩家无法登陆最终幻想14在北美的服务器遭到DDoS网络攻老师必备黑科技,还不快打包带走62岁赵本山被捕不听话现场照曝光?花60亿自救无果?本尊出面中国足坛归化球员一览之西班牙篇CBA南北寡王!原帅问赵睿啥时候结婚?赵睿等郭艾伦结婚几百元智能门锁和几千元有什么区别?卖锁老板都是C级锁芯四大后卫无缘首发,南区全明星后场竞争激烈囊肿,结节,增生皆因痰和郁,送你五种中成药化瘤,散结,消囊肿秋季要滋补润燥,记得常喝这六道鸭汤,补水防燥舒服入秋职场的语录85条热巴终于复工!宝妈却在评论区炸开了锅,2个细节露了馅驴肉的功效与作用(吃驴肉的好处)生二胎累为何还有很多人要生?几个看似很好的理由,却可能被打脸先解决俄罗斯,再对付中国?无需恐慌,美国很难做到,有三个原因牛尔自制面膜轻松美白的自制面膜李克勤带老婆和张晋夫妇聚餐,卢淑仪皮肤白嫩,颜值不输蔡少芬官方预告:一加NordCE25G新机将于2月17日登陆印度市坐上这一秒穿越回童年的时光机,放下烦恼重新做一回小孩为什么喜欢一个女生(喜欢一个人哪方面吸引你)孔刘是孔子后裔吗,孔刘是中国人吗永不言弃!加油

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找