android觸碰訊息傳遞機制

來源:互聯網
上載者:User

標籤:android觸碰   觸碰訊息   

前陣子要的工作是給案頭(Launcher啟動器,其實也是一個activity)添加一個觸摸特效(一個View),而這個特效是每次觸碰都會有,不管你在案頭上做什麼操作都會顯示特效!之前一直摸索著不知道如何入手,後來慢慢的實驗之後才知道有個android觸碰訊息傳遞機制。自己摸索的確很慢,要是早點知道這個機制那將會事半功倍。

使用者的每次觸碰(onClick,onLongClick,onScroll,etc.)都是由一個ACTION_DOWN+n個ACTION_MOVE+1個ACTION_UP組成的,使用者觸碰必先有個ACTION_DOWN響應,使用者觸碰結束必然會有個ACTION_UP。(當然如果在途中被攔截,就可能不會有了!)那麼View是如何分發訊息和攔截訊息呢?

1.View及其子類都會有的兩個方法:

public boolean dispatchTouchEvent(MotionEvent ev)  這個方法用來分發TouchEvent

public boolean onTouchEvent(MotionEvent ev) 這個方法用來處理TouchEvent

2.特殊的View子類ViewGroup則還有一個方法:

public boolean onInterceptTouchEvent(MotionEvent ev) 這個方法用來攔截TouchEvent

3.分發

dispatchTouchEvent 收到觸碰,則向最外層的View傳遞訊息,再向子層的View分發

4.攔截:

onInterceptTouchEvent 攔截返回true表示要攔截訊息,不要再向子View傳遞(這裡的子View不是繼承關係,而是包容關係)。返回false則表示不攔截訊息,可以繼續向下一層級的View傳遞訊息,子View將可以dispatchTouchEvent 收到觸碰訊息再分發訊息

5.訊息處理:

onTouchEvent 處理事件,攔截了訊息,或者是最後一個收到訊息的View調用此方法來處理事件,若返回true,則表示正確接收並處理。若返回false則表示沒有被處理,將向父View傳遞(這裡的父View不是繼承關係,而是包容關係)

6.舉例及手稿


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.