針對屏幕上的一個View組件,Android是如何區分應當觸發onTouch事件還是onClick事件? ...
針對屏幕上的一個View組件,Android是如何區分應當觸發onTouch事件還是onClick事件?在Android中,一次用戶操作可以被不同的View組件按次序分別處理,並將完全響應了用戶的一次UI操作稱之為消耗了該事件(consume),那麼Android是按什麼次序將事件傳遞的,又在什麼情況下判定為消耗了該事件?下麵通過一段具體的代碼進行說明。
在這段代碼中,先為按鈕添加單擊事件監聽器,並通過Log.i()方法輸出onClick(單擊事件)。然後為按鈕添加觸摸事件,通過判斷方式輸出當前手指是按下還是抬起。具體代碼如下:
01 Button button = (Button) findViewById(R.id.btn); //獲得按鈕對象 02 //為按鈕添加單擊事件監聽器 03 button.setOnClickListener(new View.OnClickListener() { 04 @Override 05 public void onClick(View v) { 06 Log.i("onClick", "單擊事件"); 07 } 08 }); 09 //為按鈕添加觸摸事件監聽器 10 button.setOnTouchListener(new View.OnTouchListener() { 11 @Override 12 public boolean onTouch(View v, MotionEvent event) { 13 if (event.getAction() == MotionEvent.ACTION_DOWN) { //表示手指按下時 14 Log.i("onTouch", "按下"); 15 } else if (event.getAction() == MotionEvent.ACTION_UP) {//表示手指抬起時 16 Log.i("onTouch", "抬起"); 17 } 18 return false; //表示未消耗掉這個事件 19 } 20 });
執行上面的代碼後,單擊屏幕中的按鈕,將會在LogCat面板中看到如圖7.11所示的結果。
圖7.11 顯示執行順序
說明:為一個組件同時設置單擊事件與觸摸事件時,觸摸事件首先被執行然後執行單擊事件。當觸摸事件監聽器返回值為ture時,說明消耗掉了這個事件,將不再執行單擊事件。
本文摘自明日科技出版的《零基礎學Android》作者:李磊,轉載請註明出處!!!