您的位置:首页 > 移动开发 > Android开发

android开发艺术探索事件分发总结

2017-03-01 22:51 274 查看
     
1.如果一个view设置了onTouchListener,那么onTouch方法将会被回调,如果当前onTouch方法返回的是true,那么onTouchEvent()将不会被调用;如果返回的是false那么onTouchEvent()方法还是会被调用;所以总结一下,onTouchListener的优先级高于onTouchEvent();我们平时设置的onClickListener()将会再onTouchEvent()中调用,优先级最低。
2.事件传递顺序:
Activity——>windowManager——>DecorView——>View
3.一个序列的事件从手指接触屏幕的那一刻开始,到手指离开屏幕的时候结束;在这一系列事件中,从down事件开始,中间含有数量不定的move事件;最后以up事件结尾
4.正常情况下一个系列的事件只能被一个View所拦截且消耗,因为如果一个元素一旦拦截了一个事件,那么该系列事件的所有其他事件都会直接交给他处理,因此同一个事件序列中的时间不会被两个View处理;但是通过特殊手段可以做到,比如通过onTouchEvent()将事件强行传递给其他View;
   5,某个View一旦决定拦截,那么这个系列事件将会都由他来处理;并且他的onInterceptTouchEvent将不会再被调用。
   6.某个View一旦开始处理事件,如果不消耗掉ACTION_DOWN,那个这个事件系列的其他事件也不会再交与他处理,而是传给父容器的onTouchEvent()进行处理;
   7.如果View不消耗除ACTION_DOWN以外的事件,父容器的onTouchEvent()并不会被调用,这个View也可以继续收到其他事件,然后重新传递给了activity进行处理
 
   8.View Group默认不拦截任何事件
   9.非容器view没有onInterceptTouchEvent()方法,如果事件传递进来将会直接调用onTouchEvent();
   10.非容器View onTouchEvent()大多返回true;即消耗掉事件;除非clickable和longclickable同时为false。View的longClickable默认为false;但是clickable要分情况,button默认是true,但是text View默认是false;
   11.View的enable不影响onTouchEvent的返回值;哪怕一个View的状态是disable的,只要他两个中的一个属性是true,那么他的onTouchEvent()就返回true;
   12.onClick发生的前提是可点击的,并且能够收到down和up两个事件
   13.事件传递总是由外向内的,子控件可以通过requestDisallowInterceptTouchEnent方法去干预父容器的事件分发过程,但是ACTION_DOWN事件除外;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: