安卓事件传递机制
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓事件传递机制相关的知识,希望对你有一定的参考价值。
1.触摸事件 MotionEvent
ACTION_DOWN:按下
ACTION_MOVE:移动
ACTION_UP:松开
2.以上三个触摸事件都会经历三个函数
事件分发(Dispatch):dispatchTouchEvent
事件拦截 (Intercept):onInterceptTouchEvent
事件消费 (Consume):onTouchEvent
分发的规则:从外层到内层 Activity->ViewGroup->View
分发之后看,屏幕内是否有消费事件的,如果没有就被Activity自己消费
拦截(橙色菱形)默认是false
下面的代码返回true说明不再向下分发了,就会被当前的onTouchEvent自己消费
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.d(TAG, "Custom onInterceptTouchEvent");
return super.onInterceptTouchEvent(ev);//默认都是false
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d(TAG, "onTouchEvent Custom: ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
Log.d(TAG, "onTouchEvent Custom: ACTION_MOVE");
break;
case MotionEvent.ACTION_UP:
Log.d(TAG, "onTouchEvent Custom: ACTION_UP");
break;
case MotionEvent.ACTION_CANCEL:
Log.d(TAG, "onTouchEvent Custom: ACTION_CANCEL");
break;
}
return super.onTouchEvent(event);//默认也是FALSE
}
下面的代码返回true说明textView进行了消费(onTouch被重写了)
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d(TAG, "onTouch textView: ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
Log.d(TAG, "onTouch textView: ACTION_MOVE");
break;
case MotionEvent.ACTION_UP:
Log.d(TAG, "onTouch textView: ACTION_UP");
break;
case MotionEvent.ACTION_CANCEL:
Log.d(TAG, "onTouch textView: ACTION_CANCEL");
break;
}
return true;
}
});
3.事件传递机制的应用场景
下拉刷新控件
以上是关于安卓事件传递机制的主要内容,如果未能解决你的问题,请参考以下文章