用户和应用程序的交互多数都是通过触摸事件完成,所以有必要对事件处理的内部逻辑有了解,只有这样,才能编写事件时应用自如。 android对触摸事件的处理逻辑简单概述为:从上到下传递事件,然后从下到上处理时间逻辑,其实事实我们也可以理解,在你触摸屏幕的时候,首先第一层那道事件,然后一层一层传下去,当传到具体view,如TextView,BUtton等时,结束传递,然后开始处理。一层一层往上传,但是在传的过程中,会根据onTouchEvent及
onInterceptTouchEvent(MotionEvent ev)的返回值,做不同操作吧了。下面会详细分析返回不同值的处理逻辑
触摸事件肯定由下面一系列动作 :
ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP,肯定有一个down和up事件,按实际情况来讲,也肯定从在move动作,因为人的手指在点的过程,肯定会从在一定情况的移动,只是感觉不到吧了,但是程序可以知道,只是程序理解了你的这个移动,不处理。
首先说一下事件的大概流程:事件接收层(底层:硬件和软件,一般不需要了解)---->窗口管理系统 WindowMangerServicer (WMS)----->因为所有的窗口都是有他创建的,所有WMS知道当前活动的窗口是谁,WMS将事件交给当前活动窗口-------->当前活动窗口拿到事件,调用VIewRoot类的dispatchTouchEvent,给当前活动窗口的根view--->根view开始dispatchTouchEvent事件到具体view。以下的讨论是接着这里开始详细讨论。 1.如果是具体view,(非ViewGroup),如TextView等 ,这种情况根本不存在,因为每个窗口,肯定有个rootview,及viewGroup。 2.如果是ViewGroup,比如LinearLayout等。
|
android处理触摸(touchEvent)详细流程
最新推荐文章于 2021-05-31 18:06:31 发布