Android开发教程:View的事件体系
来源:Android开发学习网 2017-03-20View是一种界面层的控件的一种抽象,它代表了一个控件,今天我们来学习一下View的事件体系。
Android开发教程:View的事件体系
没有对点击事件的处理,Activity就是静止的。
首先我们有必要从源头看一下处理分发事件的代码:
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
onUserInteraction();
}
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
return onTouchEvent(ev);
}
从代码可知,如果window拦截了事件,那么该事件就交由其进行分发。否则Activity的onTouchEvent就会被调用。PhoneWindow是Window抽象类的唯一实现,我们追踪源码会发现:
@Override
public boolean superDispatchTouchEvent(MotionEvent event) {
return mDecor.superDispatchTouchEvent(event);
}
public boolean superDispatchTouchEvent(MotionEvent event) {
return super.dispatchTouchEvent(event);
}
PhoneWindow将事件直接交由DecorView进行处理。
DecorView是程序员可做处理区域的顶级View,当然不包含状态栏,因为系统似乎并不想让我们对状态栏有任何的染指。DecorView继承自FrameLayout,通过
mDecorView = getWindow().getDecorView();
可以获取。其中
((ViewGroup)mDecorView.findViewById(android.R.id.content)).getChildAt(0);
获取到的View等同我们底下下的rootView
setContentView(rootView);
终事件会从ViewGroup中传到传到我们的View中进行处理;
与事件传递相关的主要有三个方法,其关系如下:
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean consume = false;
if (onInterceptTouchEvent(ev)) {
consume = onTouchEvent(ev);
} else {
consume = child.dispatchTouchEvent(ev);
}
return consume;
Copyright ©2004-2018 华清远见教育科技集团 版权所有
京ICP备16055225号,京公海网安备11010802025203号