安卓監聽OnTouchListener的返回值true或者false的作用以及對OnLongClickListener和OnClickListener監聽事件影響和作用

android應用中常用的監聽OnTouchListener、OnClickListener、OnLongClickListener。

首先在Activity中創建一個button,然后對這個button同時設置OnTouchListener、OnClickListener、OnLongClickListener這三種監聽方式。

package com.example.testlistenerdemo;

import android.os.Bundle;

import android.app.Activity;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnLongClickListener;

import android.view.View.OnTouchListener;

import android.widget.Button;

import android.support.v4.app.NavUtils;

public class MainActivity extends Activity {

private Button button;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button = (Button)findViewById(R.id.button);

button.setOnTouchListener(touchListener);

button.setOnClickListener(clickListener);

button.setOnLongClickListener(longClickListener);

}

public OnTouchListener touchListener = new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

//按下

if(event.getAction()==MotionEvent.ACTION_DOWN){

Log.i("log","action_down");

return true;

}else if(event.getAction()==MotionEvent.ACTION_UP){

Log.i("log","action_up");

return true;

}else if(event.getAction()==MotionEvent.ACTION_MOVE){

Log.i("log","action_move");

return true;

}

return false;

}

};

public OnClickListener clickListener = new OnClickListener() {

@Override

public void onClick(View v) {

Log.i("long", "click");

}

};

public OnLongClickListener longClickListener = new OnLongClickListener() {

@Override

public boolean onLongClick(View v) {

Log.i("long", "long click");

return false;

}

};

}

在都是返回true值的情況下,只會監聽到onTouchListener。OnClickListener、OnLongClickListener不能被監聽到。

執行結果:


長按和短按按鈕都只能觸發onTouchListener的事件。

action_down處理完需要做的事情之后就返回true,表示action_down 事件已經被消耗了。不管你怎么的click或者longclick 都不會得到響應。

②:

改變onTouchListener里的代碼。將true改為false。

if(event.getAction()==MotionEvent.ACTION_DOWN){

Log.i("log","action_down");

return false;

}

執行結果:


3個為一組。長按和短按按鈕只會觸發OnTouchListener、onLongClickListener事件。如果長按,則出現action_down、long click、action_up。短按則是action_down、action_up、long click,短按觸發long click是因為action_up返回了true,它在起作用。因為沒有更改長按的時間而是使用系統的500ms,所以在手離開手機屏幕的時候就又有了一次long click。

③:

//按下

if(event.getAction()==MotionEvent.ACTION_DOWN){

Log.i("log","action_down");

returnfalse;

}elseif(event.getAction()==MotionEvent.ACTION_UP){

Log.i("log","action_up");

returnfalse;

}

執行結果:


前3個為短按。后4個為長按。

④:

注意:

action_up 返回true時要注意。如果你同時使用這三種監聽的話。action_up之后如果產生long click的話。button可是一直處于按下的狀態。可以從控件的顏色上看得到。

再者,使用OnLongClickListener的時候也要注意它的返回值,返回true時會使手機的振動一下。而返回false時則不會有這種效果。

true和false在其中起著標志事件是否被消耗,如果消耗了就不再傳遞給其他控件了。如果沒有消耗則還會傳遞給其他控件,觸發其他控件的事件處理函數。





原文鏈接:http://5200415.blog.51cto.com/3851969/1003113/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容