一、相关事件
1.与Activity相关的事件:dispatchTouchEvent(分发事件)、onTouchEvent(触摸事件)
2.与ViewGroup相关的事件:dispatchTouchEvent(分发事件)、onInterceptTouchEvent(拦截事件)、onTouchEvent(触摸事件)
3.与View相关的事件:dispatchTouchEvent(分发事件)、onTouchEvent(触摸事件)
二、事件简介
1.dispatchTouchEvent:分发事件,默认返回false。false即表示继续向下分发事件,true则表示停止分发事件。
2.onInterceptTouchEvent:拦截事件,默认返回false。false表示不拦截事件,true表示拦截事件并交由自身的onTouchEvent进行处理。
3.onTouchEvent:触摸事件,默认返回false。false表示没有消费此次Touch事件,true则表示此次Touch事件被消费了。
三、研究用例
1.以下图为例进行分析,其中A、B、C都是RelativeLayout,Button-B是B层的Button,C层有一个Button和一个TextView。
2.为了能打印出各个方法何时执行的日志,我让A、B、C继承了RelativeLayout并重写了dispatchTouchEvent(分发事件)、onInterceptTouchEvent(拦截事件)、onTouchEvent(触摸事件)方法,如下(A、B、C相似):
package com.katherine.point;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.RelativeLayout;
public class A extends RelativeLayout {
public A(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public A(Context context, AttributeSet attrs) {
super(context, attrs);
}
public A(Context context) {
super(context);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
System.out.println("A-----dispatchTouchEvent");
return super.dispatchTouchEvent(ev);
// return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
System.out.println("A-----onInterceptTouchEvent");
return super.onInterceptTouchEvent(ev);
// return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("A-----onTouchEvent");
return super.onTouchEvent(event);
// return true;
}
}
Button-B、Button-C继承了Button类:
package com.katherine.point;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;
public class ButtonOfBfloor extends Button {
public ButtonOfBfloor(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ButtonOfBfloor(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ButtonOfBfloor(Context context) {
super