欢迎来到天天文库
浏览记录
ID:30772869
大小:279.09 KB
页数:9页
时间:2019-01-03
《android触摸事件分发机制--锁屏部》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一触摸事件涉及的类:触摸事件涉及到的两个重要主角就是ViewGroup和View,其中ViewGroup继承自View。所有的界面控件都是最终继承口ViewGroup或者View。二触摸事件涉及的方法说明:涉及的方法:dispatchTouchEvent、onTouchEvent>onlnterceptTouchEvent、onClickListeneronLongClickListener、onTouchListener。作用分别是:dispatchTouchEvent事件分发onlnterceptTouchEvent事件拦
2、截onTouchEvent事件处理。onClickListener点击事件onLongClickListener长按事件onTouchListener触摸事件监听View类里有两个方法dispatchTouchEvent,onTouchEventoViewGroup类里新增了onlnterceptTouchEvent力法。由于ViewGroup触摸事件可以分发给子view处理,如果不想让子view处理就可以拦截事件处理,但是view没有子view,所以处理事件吋不需要做拦截处理,所以就没有onlnterceptTouchEve
3、nt接口。它们之间的调丿IJ关系如何将在如下的源码分析中充分说明三触摸事件源码分析说明:—个Touch事件敲先到达的是根节点,即Acitivty的ViewGroup时,它会依次下发,所以我们需要从第一个收到触摸事件的控件ViewGroup来跟踪触摸事件的分发处理流程。対于上层应用來说触摸事件笫一入口是ViewGroup的dispatchTouchEvent:publicbooleandispatchTouchEvent(MotionEventev){/***对mFirstTouchTarget解释:是第一个找到的接收处理触摸事
4、件的子view,down的时候如果子view的dispatchTouchEvent返回true(—般子view不复写此方法,所以只要注册的onTouchLister接口或onTouchEvent方法返回true)mFirstTouchTarget就不是null。*如果了view的down-di件返[Elfalse那么mFirstTouchTarget就是null,Z后*move、up事件就不给子view/**/if(actionMasked==MotionEvent.>4CTIO/V_DOIV/V
5、
6、mFirstTouchTa
7、rget!=null){if(!disallowlntexcept){intercepted=onlnterceptTouchEvent(ev);}else{intercepted=false;}}else{//Therearenotouchtargetsandthisactionisnotaninitialdown//sothisviewgroupcontinuestointercepttouches.intercepted=true;}//如果自己的onlnterceptTouchEvent拦截返冋true或者down的时
8、候子view没有处理触摸件//就不在执行如下逻辑,即不在调用子view的触摸事件if(!canceled&&!intercepted){if(newTouchTarget==null&&childrenCount!=0){for(inti=childrenCount-1;i>=0;i--){//调用子view的触摸方法,如果子view接收触摸事件并处理(子view的dispatchTOuch或者onTouch返Idtrue)if(dispatchTransformedTouchEvent(ev,false,child.idBi
9、tsToAssign)){//Childwantstoreceivetouchwithinits//bounds,给mFirstTouchTarget赋值newTouchTarget=addTouchTarget(child,idBitsToAssign);alreadyDispatchedToNewTouchTarget=true;break;}}}}//Dispatchtotouchtargets.if(mFir^stTouchTa“EGt==null){//Notouchtargetssotreatthisasanord
10、inary//view.调用父view自己的touchhandied=dispatchTransformedTouchEvent(ev,canceled^null,TouchTarget.ALLPOINTERIDS);}else{//Dispatchtotouchtarget
此文档下载收益归作者所有