android事件傳遞機制

事件的基礎:按下,移動,擡起。android

首先執行的是按下,其次可能執行的是移動,最後執行的擡起。ide

 

android事件傳遞機制:post

android事件傳遞按上到下進行層級傳遞,事件處理從 activity 到 viewGroup 再到 view.this

 

view和viewGroup對事件的響應方法(即傳遞方法):spa


dispatchTouchEvent():  對事件的分發。     return     true,    不繼續分發。   事件

                                                              return     false,繼續往下一層級分發it

onTouchEvent():          對事件的處理。      return    true    表示消費處理當前事件,event

                                                              return    false    則不處理,交給子控件進行繼續分發ast

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()

相關文章
相關標籤/搜索