Android View 按鍵事件分發流程 onTouch onTouchEvent onClick onLongClick 和 onKey onKeyDown onClick

來源:互聯網
上載者:User

標籤:

1.為了測試,我們同時將View 設定 onTouch  onTouchEvent  onClick onLongClick 四個事件,經過加列印測試發現,按鍵分發流程是這樣的 如果是短按:onTouch-->>onTouchEvent--->>onClick 。長按:onTouch-->>onTouchEvent--->>onLongClick-->>onClick。為什麼會是這樣?


我們看View 源碼

 public boolean dispatchTouchEvent(MotionEvent event) {        if (mInputEventConsistencyVerifier != null) {            mInputEventConsistencyVerifier.onTouchEvent(event, 0);        }        if (onFilterTouchEventForSecurity(event)) {            //noinspection SimplifiableIfStatement            ListenerInfo li = mListenerInfo;            if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED                    && li.mOnTouchListener.onTouch(this, event)) {                return true;            }            if (onTouchEvent(event)) {                return true;            }        }        if (mInputEventConsistencyVerifier != null) {            mInputEventConsistencyVerifier.onUnhandledEvent(event, 0);        }        return false;    }

分析:在事件分發方法裡面,先執行

 if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED                    && li.mOnTouchListener.onTouch(this, event)) {                return true;            }

如果 onTouch 返回值為true,那麼事件就在這裡被消費了。事件就不分發下去,不會執行onTouchEvent事件,之後的事件也不執行。如果onTouch返回值為false,事件繼續分發下去,執行
if (onTouchEvent(event)) {                return true;            }

然後才執行onLongClick 事件,然後在執行onClick事件。只要之前的按鍵事件沒有被消費,那麼事件會被繼續分發出來。直到消費完為止。


2.同樣 給View 設定 onKey onKeyDown onClick 等事件,同理分發流程是:onKey -->>onKeyDown --->>onClick,原來同上。

記錄只是為了便於查閱。

Android View 按鍵事件分發流程 onTouch onTouchEvent onClick onLongClick 和 onKey onKeyDown onClick

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.