Android view事件分发总结

    xiaoxiao2022-06-29  37

    事件分发的关系伪代码: public boolean dispatchTouchEvent(MotionEvent ev){ boolean consume = false; if(onInterceptTouchEvent(ev)){ consume = onTouchEvent(ev); }else{ consume = child.dispatchTouchEvent(ev); } return consume; } 1、一般情况是不对dispatchTouchEvent()进行改写的,通常是改写onInterceptTouchEvent、onTouchEvent以到达拦截事件的目的,当一个控件对某个事件拦截成功了,那么接下来同一系列的事件都将会有该控件来处理,此后onInterceptTouchEvent就不会被调用了      是否将事件交个某个控件处理,关键就是看ActionDown了,如果截获了ActionDown,那么接下来的事件都会由该控件处理,否则将交由其他控件处理。 2、关于onTouch()、onTouchEvent()、onClick()的优先级问题(onTouch()在OnToucheListener()中设置,onClick()在OnClickListenter()中设置)     onTouch>onTouchEvent>onClick     只有当onTouch反会false时,onTouchEvent才会被调用,只有当onTouchEvent返回false时,onClick才会被调用。 3、事件的传递顺序:Activity->Window->View 4、ViewGroup默认不拦截任何事件,即onInterceptTouchEvent()方法返回false。View没有onInterceptTouchEvent()方法,直接掉用onTouchEvent()方法,默认是会对事件进行消耗的,即返回true。 5、View的enable属性不会对onTouchEvent()的返回值产生影响,但clickable、longclickable属性会。
    转载请注明原文地址: https://ju.6miu.com/read-1125341.html

    最新回复(0)