Android事件(一)

    xiaoxiao2025-08-10  9

    1.dispatchTouchEvent 返回结果true或者false --ViewGroup:当一个Touch事件(触摸事件为例)到达根节点,即Acitivty的ViewGroup时,它会依次下发,下发的过程是调用子View(ViewGroup)的dispatchTouchEvent方法实现的。简单来说,就是ViewGroup遍历它包含着的子View,调用每个View的dispatchTouchEvent方法,而当子View为ViewGroup时,又会通过调用ViwGroup的dispatchTouchEvent方法继续调用其内部的View的dispatchTouchEvent方法。上述例子中的消息下发顺序是这样的:①-②-⑤-⑥-⑦-③-④。dispatchTouchEvent方法只负责事件的分发,它拥有boolean类型的返回值,当返回为true时,顺序下发会中断。在上述例子中如果⑤的dispatchTouchEvent返回结果为true,那么⑥-⑦-③-④将都接收不到本次Touch事件(任何方法都不能调用) a.判断条件,执行OnTouchEvent (如果事件由此控件处理则不再执行onInterceptTouchEvent方法)   b.dispatchTouchEvent 也调用自己的onInterceptTouchEvent c.intercepted是onInterceptTouchEvent的返回,如果返回true则将所有的下发操作拦截,返回false则继续下发 d.调用子类的dispatchTouchEvent,如果子类dispatch返回true则其他控件都收不到事件了 (包括未调用的同等级,同等级下级,自己下级) e.调用ViewGroup中的dispatchTransformedTouchEvent方法传入null   f.dispatchTransformedTouchEvent方法如果child为null调用继承于View的dispatchTouchEvent,不为null调用孩子的 dispatchTouchEvent --View:dispatchTouchEvent方法,并不执行分发工作,或者说它分发的对象就是自己,决定是否把touch事件交给自己处理,而处理的方法,便是onTouchEvent事件,事实上子View的dispatchTouchEvent方法真正执行的代码是这样的 注:View中如果注册了OnTouchListenr则调用Listener的onTouch,否则调用onTouchEvent   一般情况下,我们不该在普通View内重写dispatchTouchEvent方法,因为它并不执行分发逻辑。当Touch事件到达View时,我们该做的就是是否在onTouchEvent事件中处理它。   2.onInterceptTouchEvent ViewGroup:直接返回false   View:无此方法   3.onTouchEvent ViewGroup:DOWN MOVE UP事件处理 调用的View View:DOWN MOVE UP事件处理 (每个Android原生控件都复写了onTouchEvent) 如果onTouchEvent 返回false 则View的onTouchEvent 会处理DOWN MOVE UP事件 如果onTouchEvent 返回true  则View的onTouchEvent 会处理DOWN一次事件   4.OnTouchListenr 如果OnTouchListener 返回false 则View中的dispatchTouchEvent会去调用View的onTouchEvent 如果OnTouchListener 返回true 则View中的dispatchTouchEvent不会去调用View的onTouchEvent   onInterceptTouchEvent: DOWN返回false MOVE或者UP返回true 则MOVE或者UP事件再次传递下去是变为CANCEL事件,并且下次事件不再传递下去(比如MOVE返回true下次的MOVE或UP不再继续传递下去) DOWN返回true 事件不会继续传递下去    onTouchEvent中第一次DOWN事件返回的值才起作用,其他时候MOVE或UP返回true或者false不管用 DOWN返回false 事件继续上传 DOWN返回true  以后事件都由自己处理,不再上传,(如果是ViewGroup的onTouchEvent,下次事件不会调用这个ViewGroup的onInterceptTouchEvent)   如果自定义的ViewGroup控件的OnTouchEvent事件返回的是true,事件发生时DOWN会一直传递下去,是一种递归的形式,执行完子控件的onTouchEvent事件后,执行自己的onTouchEvent事件是如果DOWN返回true则以后的所有事件不再传递下去直接由他处理 如果自定义的ViewGroup控件的OnTouchEvent事件返回的是true,并且他有子控件的onTouchEvent事件返回true,以后的事件还是由子控件处理   5.OnClickListener View:onTouchEvent方法     View:performClick方法 View:setOnClickListener方法   View:setClickable方法   如果注册了监听器,onTouchEvent方法中Up事件处理会调用OnClickListener。猜测如果控件注册了OnClickListener在View的OnTouchEvent方法中会返回true否则false 由10288行代码可知CLICKABLE标志位使能则返回true  
    转载请注明原文地址: https://ju.6miu.com/read-1301607.html
    最新回复(0)