1. 程式人生 > >單擊事件與觸摸事件的區別

單擊事件與觸摸事件的區別

當前 oid 顯示 new div over .get 科技 基礎

針對屏幕上的一個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》作者:李磊,轉載請註明出處!!!

單擊事件與觸摸事件的區別