android事件传递机制

原创
2015/08/10 15:21
阅读数 90

事件的基础:按下,移动,抬起。

首先执行的是按下,其次可能执行的是移动,最后执行的抬起。

 

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;
 }

 

 

注意点:

//   在tabactiivty及其子类无法响应中onkeydown(),onkeyup()。所以要换成dispatchKeyEvent()

展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部