初步了解touch事件分发和消费机制后,我们就已经清楚了,event传递是从外层容器往里传递,而消费则是由里到外判断是否消费。
有一种场景,我们希望有多个view来处理这个touch事件。可以重写View的dispatchTouchEvent。将传递中的touch事件回调出来
public class MyFramLayout extends FrameLayout {
public MyFramLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (onFingerTouch != null) {
onFingerTouch.onFingerTouch(ev);
}
return super.dispatchTouchEvent(ev);
}
public OnFingerTouch onFingerTouch;
public void setOnFingerTouchListener(OnFingerTouch onFingerTouch){
this.onFingerTouch=onFingerTouch;
}
public interface OnFingerTouch{
void onFingerTouch(MotionEvent ev);
}
}
在进入外层容器的dispatchTouchEvent方法后,touch事件仍然继续传递,我们回调出来的event事件并不算被消费,事件还会继续传递被其他view去消费。