詳談Android中onTouch與onClick事件的關(guān)系(必看)
這幾天遇到點(diǎn)關(guān)于Android的觸摸事件相關(guān)的,還跟onClick有關(guān),暫且記下:
LinearLayout分別設(shè)置了onTouchListener,onClickListener,onLongClickListener及onTouchEvent回調(diào)
1、在屏幕上觸摸之后基本的執(zhí)行流程如下:
onTouch,action=0 onTouchEvent,action=0 onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onTouch,action=1 onTouchEvent,action=1 onClick
也就是先說onTouchListener是最先被觸發(fā)的,然后是本身的onTouchEvent回調(diào);當(dāng)最后的up事件發(fā)生并被onTouchEvent處理后才會(huì)觸發(fā)onClickListener。
2、把onTouchEvent回調(diào)中的super.onTouchEvent去除,直接返回true;則流程如下:
onTouch,action=0 onTouchEvent,action=0 onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onTouch,action=1 onTouchEvent,action=1
可以看到onClickListener永遠(yuǎn)無法被觸發(fā),也側(cè)面說明了對onClick的觸發(fā)是在onTouchEvent回調(diào)中來實(shí)現(xiàn)的。
3、長按屏幕,流程如下:
onTouch,action=0 onTouchEvent,action=0 onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onLongClick onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onTouch,action=1 onTouchEvent,action=1 onClick
當(dāng)長按的時(shí)候,無需到up就會(huì)觸發(fā)onLongClick的響應(yīng),但之后也會(huì)繼續(xù)觸發(fā)onClick的響應(yīng)。
4、但如果在onLongClick中返回true,則流程如下,即只在中間觸發(fā)了onLongClick,之后會(huì)繼續(xù)響應(yīng)touch,但當(dāng)up的時(shí)候就不會(huì)再觸發(fā)onClick
onTouch,action=0 onTouchEvent,action=0 onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onLongClick onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onTouch,action=1 onTouchEvent,action=1
測試代碼如下:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FrameLayout frame = (FrameLayout)findViewById(R.id.container); LinearLayoutTest line = new LinearLayoutTest(this); line.setOnClickListener(new ClickListener()); line.setOnLongClickListener(new LongClickListener()); line.setOnTouchListener(new TouchListener()); line.setLongClickable(true); frame.addView(line); } public class ClickListener implements OnClickListener { @Override public void onClick(View v) { Log.e("test","onClick"); } } public class LongClickListener implements OnLongClickListener{ @Override public boolean onLongClick(View v) { Log.e("test","onLongClick"); return true; } } public class TouchListener implements OnTouchListener{ @Override public boolean onTouch(View v, MotionEvent event) { Log.e("test","onTouch,action="+event.getAction()); return false; } } } public class LinearLayoutTest extends LinearLayout{ public LinearLayoutTest(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { Log.e("test","onTouchEvent,action="+event.getAction()); return super.onTouchEvent(event); } }
以上這篇詳談Android中onTouch與onClick事件的關(guān)系(必看)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android自定義View——扇形統(tǒng)計(jì)圖的實(shí)現(xiàn)代碼
本篇文章主要介紹了Android自定義View——扇形統(tǒng)計(jì)圖的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02Android手機(jī)號(hào)碼輸入框(滿11位自動(dòng)跳到下個(gè)輸入框)實(shí)例代碼
這篇文章主要介紹了Android手機(jī)號(hào)碼輸入框(滿11位自動(dòng)跳到下個(gè)輸入框)實(shí)例代碼,需要的朋友可以參考下2017-10-10Android 中ScrollView與ListView沖突問題的解決辦法
這篇文章主要介紹了Android 中ScrollView與ListView沖突問題的解決辦法的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握解決問題的辦法,需要的朋友可以參考下2017-10-10Phonegap使用拍照功能時(shí)的內(nèi)存問題
最近幾天在學(xué)習(xí)使用phonegap進(jìn)行android應(yīng)用的開發(fā),網(wǎng)上的資料比較亂,個(gè)人參考了很多資料,也試驗(yàn)了很多次,一直在摸索,總算小有心得,這此過程中也遇到了一些問題,這里給大家分享下解決Phonegap使用拍照功能時(shí)的內(nèi)存問題的方法,這里簡單的整理一下2015-05-05Android 頂部標(biāo)題欄隨滑動(dòng)時(shí)的漸變隱藏和漸變顯示效果
這篇文章主要介紹了Android 頂部標(biāo)題欄隨滑動(dòng)時(shí)的漸變隱藏和漸變顯示效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06在Android中動(dòng)態(tài)添加Panel框架的實(shí)現(xiàn)代碼
項(xiàng)目經(jīng)常會(huì)有這種需求,就是想動(dòng)態(tài)的在某個(gè)界面上添加一個(gè)Panel。比如,有一個(gè)按鈕,點(diǎn)擊后會(huì)顯示下拉菜單式的界面。這種需求,就屬于動(dòng)態(tài)添加一個(gè)Panel。需求多了,就要研究是否可以抽象出通用的框架代碼,以方便開發(fā),所以就有了以下內(nèi)容2013-05-05Android PhotoView使用步驟實(shí)例詳解
這篇文章主要介紹了Android PhotoView使用步驟實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06當(dāng)Flutter遇到節(jié)流與防抖的思路和流程優(yōu)化
這篇文章主要給大家介紹了關(guān)于當(dāng)Flutter遇到節(jié)流與防抖的思路和流程優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01Android自定義頂部導(dǎo)航欄控件實(shí)例代碼
這篇文章主要介紹了Android自定義頂部導(dǎo)航欄控件實(shí)例代碼,需要的朋友可以參考下2017-12-12