-
事件序列。查看全部
-
事件的类型。
查看全部 -
viewgroup事件处理
查看全部 -
事件分发的对象:MotionEvent。
查看全部 -
事件传递过程.
查看全部 -
PhoneWindow{
// This is the top-level view of the window, containing the window decor. private DecorView mDecor;
}
查看全部 -
事件通过Acticity的DispatchTocuhEvent走到DecorView的superDispatchTouchEvent,再走到ViewGroup再到View
查看全部 -
传递顺序:activiyt window decorView viewGroup view
查看全部 -
Activity事件分发流程
查看全部 -
传递层级,最终传到View,按子类继承顺序分发
首先在Activity上,传递给其所持有的Window,然后给window所持有的DecorView,接着按父子继承关系,依次传递给ViewGroup和View
查看全部 -
ViewGroup时间分发
查看全部 -
每个Activity持有Window窗体,而Window是个抽象类,其唯一的实现类是PhoneWindow,所以Window的
superDispatchTouchEvent
方法就是调用PhoneWindow的DispatcherToucherEvent方法,,实现的调用DecorView的 SuperDispatcherToucherEvent方法(PhoneWindow持有DecorView)。DecorView继承自FrameLayout(内部没有实现SuperDispatcherToucherEvent方法),FrameLayout继承自ViewGroup(实现SuperDispatcherToucherEvent方法)。
public boolean superDispatchTouchEvent(MotionEvent event) { return mDecor.superDispatchTouchEvent(event); }
,
查看全部 -
ViewGroup:dispatchTouchEvent主要做了3件事
1、去判断是否需要拦截事件
2、在当前ViewGroup中找到用户真正点击的View
3、分发事件到View上
查看全部 -
onInterceptTouchEvent方法会在事件分发的过程中调用,如果返回true,说明当前的ViewGroup会拦截这个事件,事件不会再往子View传递;返回false,当前的ViewGroup不会拦截这个事件,事件继续向子View传递。
ViewGroup是没有onTouchEvent方法的实现的,它是在父类View中实现。如果想让事件终止,不让事件传递到子View中,并且用户的触摸事件,我们会自己进行处理,可以重写onInterceptTouchEvent,让它返回true,同时为了处理用户的触摸事件,我们可以重写onTouchEvent方法,在其中编写一些事件的处理逻辑。
查看全部 -
Activity的事件分发流程图
查看全部
举报