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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM