Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android觸碰消息傳遞機制

android觸碰消息傳遞機制

編輯:關於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.舉例示意圖及手稿


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved