标签:
事件的基础:按下,移动,抬起。
首先执行的是按下,其次可能执行的是移动,最后执行的抬起。
android事件传递机制:
android事件传递按上到下进行层级传递,事件处理从 activity 到 viewGroup 再到 view.
view和viewGroup对事件的响应方法(即传递方法):
dispatchTouchEvent(): 对事件的分发。 return true, 不继续分发。
return false,继续往下一层级分发
onTouchEvent(): 对事件的处理。 return true 表示消费处理当前事件,
return false 则不处理,交给子控件进行继续分发
onInterceptTouchEvent():对事件的拦截 (注意点:viewGroup才有)
return true 拦截当前事件,不继续往下分发,交给自身的onTouchEvent进行处理。
return false 则不拦截,继续往下传。
1.onTouch事件要先于onClick事件执行
2.onTouch在事件分发方法dispatchTouchEvent中调用,
3.而onClick在事件处理方法onTouchEvent中被调用
4.onTouchEvent()要后于dispatchTouchEvent方法的调用
小案例:双击退出
/*
* 双击退出的原理:
* 通过一个变量来判断,
* handler.postDelayed():延迟多久时间后恢复变量的原来状态
*/
boolean is2CallBack=false;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
if(!is2CallBack){
is2CallBack=true;
Toast.makeText(MainActivity.this, "再次点击退出",Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
public void run() {
is2CallBack=false;
}
}, 3*1000);
}
else{
android.os.Process.killProcess(android.os.Process.myPid());
}
}
return true;
}
标签:
原文地址:http://my.oschina.net/u/2406195/blog/490185