佛山 网站设计公司,做网站导航用什么开元程序,万能网站浏览器,wordpress前端可视化编辑器1. 基础认知
1.1 事件分发的对象是谁#xff1f;
答#xff1a;点击事件#xff08;Touch事件#xff09;
定义 当用户触摸屏幕时#xff08;View 或 ViewGroup派生的控件#xff09;#xff0c;将产生点击事件#xff08;Touch事件#xff09;Touch事件的相关细节…1. 基础认知
1.1 事件分发的对象是谁
答点击事件Touch事件
定义 当用户触摸屏幕时View 或 ViewGroup派生的控件将产生点击事件Touch事件Touch事件的相关细节发生触摸的位置、时间等被封装成MotionEvent对象 事件类型4种
事件类型具体动作MotionEvent.ACTION_DOWN按下View所有事件的开始MotionEvent.ACTION_UP抬起View与DOWN对应MotionEvent.ACTION_MOVE滑动ViewMotionEvent.ACTION_CANCEL结束事件非人为原因特别说明事件列 从手指接触屏幕 至 手指离开屏幕这个过程产生的一系列事件注一般情况下事件列都是以DOWN事件开始、UP事件结束中间有无数的MOVE事件如下图 1.2 事件分发的顺序
即 事件传递的顺序Activity - ViewGroup - View
activity返回true时消费事件viewGroup不再响应事件。 示意图
1.3 事件分发过程由哪些方法协作完成
答dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent() activity事件触发顺序viewGroup-activity
11-29 16:32:42.067 16915-16915/com.administrator.mvpdome E/lgq: Activity分发11111111111111 11-29 16:32:42.068 16915-16915/com.administrator.mvpdome E/lgq: viewGroup分发ddddddddddddd 11-29 16:32:42.069 16915-16915/com.administrator.mvpdome D/lgq: viewGroup拦截iiiiiiiii 11-29 16:32:42.069 16915-16915/com.administrator.mvpdome I/lgq: viewGroup触摸tttttttttttttttt
activity事件触发顺序view-activity
11-29 16:34:32.027 16915-16915/com.administrator.mvpdome E/lgq: Activity分发11111111111111 11-29 16:34:32.028 16915-16915/com.administrator.mvpdome E/lgq: Activity触摸11111111111111 ViewGroup事件触发顺序view-viewGroup
11-29 15:28:45.515 10978-10978/com.administrator.mvpdome E/lgq: dispatchTouchEvent分发ddddddddddddd 11-29 15:28:45.515 10978-10978/com.administrator.mvpdome D/lgq: onInterceptTouchEvent拦截iiiiiiiii 11-29 15:28:45.516 10978-10978/com.administrator.mvpdome I/lgq: onTouchEvent触摸tttttttttttttttt
ViewGroup事件触发顺序viewGroup-viewGroup
11-29 15:28:45.515 10978-10978/com.administrator.mvpdome E/lgq: dispatchTouchEvent分发ddddddddddddd 11-29 15:28:45.515 10978-10978/com.administrator.mvpdome D/lgq: onInterceptTouchEvent拦截iiiiiiiii
1.4 onTouch()和onTouchEvent()的区别
该2个方法都是在View.dispatchTouchEvent中调用但onTouch优先于onTouchEvent执行若手动复写在onTouch中返回true即 将事件消费掉将不会再执行onTouchEventViewGroup的dispatchTouchEvent是真正在执行“分发”工作而View的dispatchTouchEvent方法并不执行分发工作或者说它分发的对象就是自己决定是否把touch事件交给自己处理而处理的方法便是onTouchEvent事件事实上子View的dispatchTouchEvent方法真正执行的代码是这样的 ViewGroup的onTouchEvent事件是什么时候处理的呢当ViewGroup所有的子View都返回false时onTouchEvent事件便会执行。由于ViewGroup是继承于View的它其实也是通过调用View的dispatchTouchEvent方法来执行onTouchEvent事件。 在目前的情况看来似乎只要我们把所有的onTouchEvent都返回false就能保证所有的子控件都响应本次Touch事件了。但必须要说明的是这里的Touch事件只限于Acition_Down事件即触摸按下事件,而Aciton_UP和Action_MOVE却不会执行。事实上一次完整的Touch事件应该是由一个Down、一个Up和若干个Move组成的。Down方式通过dispatchTouchEvent分发分发的目的是为了找到真正需要处理完整Touch请求的View。当某个View或者ViewGroup的onTouchEvent事件返回true时便表示它是真正要处理这次请求的View之后的Aciton_UP和Action_MOVE将由它处理。当所有子View的onTouchEvent都返回false时这次的Touch请求就由根ViewGroup即Activity自己处理了。