什么是觸摸事件?
- 觸摸事件就是捕獲觸摸屏幕后產生的事件。Android為觸摸事件封裝了一個類:
MotionEvent
。MotionEvent
類封裝了很多東西,比如觸摸點的坐標:event.getX()
、點擊的事件類型:MotionEvent.ACTION_DOWN
,MotionEvent.ACTION_UP
,MotionEvent.ACTION_MOVE
。
事件傳遞機制
這是一個簡單的布局:最外層是一個ViewGroupA,里面包含一個ViewGroupB,然后B里面包含一個子View MyView。
我們先看事件傳遞及處理的3個方法:
1、public boolean dispatchTouchEvent(MotionEvent ev);
事件分發
2、public boolean onInterceptTouchEvent(MotionEvent ev);
事件攔截方法
3、public boolean onTouchEvent(MotionEvent ev);
處理觸摸事件。
其中View是沒有事件攔截的方法。
傳遞機制
事件傳遞順序:觸摸事件 ----> ViewGroupA---->ViewGroupB---->MyView
事件傳遞的時候,先執行public boolean dispatchTouchEvent(MotionEvent ev);
方法,再執行public boolean onInterceptTouchEvent(MotionEvent ev);
方法。如果父容器ViewGroup沒有攔截,觸摸事件將從最外面的根布局傳遞到最里面的子View。
事件處理的順序是:MyVIew---->ViewGroupB---->ViewGroupA。 事件處理(消費)執行public boolean onTouchEvent(MotionEvent ev);
方法。
當父容器ViewGroup的onInterceptTouchEvent(MotionEvent ev)
方法返回false的時候,父容器都不會攔截事件,將會繼續分發事件給它的子ViewGroup或者子View。當ViewGroup或者View的onTouchEvent(MotionEvent ev)
返回true,將不再進行事件處理的傳遞,也就是不再傳遞給上級。
事件傳遞就是這么簡單的啦,但是要靈活運用卻沒那么簡單。下一篇文章我們用這個原理做一些有趣的事。