安卓觸控事件與單擊事件的區別

李永傑AAAA發表於2018-11-03

在學習了安卓的觸控事件和單擊事件後,我做了一個小實驗,從中總結出它們之間的區別。

實驗如下:

首先在activity_main.xml檔案中製作一個簡單的按鈕

在Java  class檔案中設定對按鈕的單擊監聽,和觸控監聽:

package com.example.a13468.mydemo03;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    private Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=findViewById(R.id.btn);


        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Log.i("onClick","單擊事件");
            }
        });
        btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //如果檢測活動觸控按下
                if(event.getAction()==MotionEvent.ACTION_DOWN){
                    Log.i("onClick","按下螢幕");
                }
                //如果檢測活動觸控抬起
                else if(event.getAction()==MotionEvent.ACTION_UP){
                    Log.i("onClick","抬起螢幕");
                }
                return true;
                /**
                 * 如果返回為true觸控事件完全消耗了當前的事件,單擊事件不會被觸法。
                 * 如果返回為false觸控事件沒有完全消耗了當前的事件,單擊事件會被觸法。
                 *
                 */
            }
        });
    }
}

用Log.i語句可以在日誌檔案中看到詳細的變化

執行程式,點選按鈕,日誌檔案中我們可以看到日誌檔案只輸出了觸控監聽,說明程式只實現了觸控監聽。

當把class檔案中 38行程式碼返回值改成false時,執行程式,點選按鈕,日誌檔案中我們可以看到日誌檔案輸出了觸控監聽和單擊監聽,說明程式實現了兩個監聽:

 原因是:如果返回為true觸控事件完全消耗了當前的事件,單擊事件不會被觸法。 如果返回為false觸控事件沒有完

同時可以得出結論,觸控事件和單擊事件的區別:單擊事件只觸法一個動作,但是觸控事件可以觸法多個動作。

相關文章