什么是觸摸事件滋饲?
- 觸摸事件就是捕獲觸摸屏幕后產(chǎn)生的事件蜂厅。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);
事件分發(fā)
2、public boolean onInterceptTouchEvent(MotionEvent ev);
事件攔截方法
3蝠引、public boolean onTouchEvent(MotionEvent ev);
處理觸摸事件阳谍。
其中View是沒有事件攔截的方法蛀柴。
傳遞機制
事件傳遞順序:觸摸事件 ----> ViewGroupA---->ViewGroupB---->MyView
事件傳遞的時候,先執(zhí)行public boolean dispatchTouchEvent(MotionEvent ev);
方法矫夯,再執(zhí)行public boolean onInterceptTouchEvent(MotionEvent ev);
方法鸽疾。如果父容器ViewGroup沒有攔截,觸摸事件將從最外面的根布局傳遞到最里面的子View训貌。
事件處理的順序是:MyVIew---->ViewGroupB---->ViewGroupA制肮。 事件處理(消費)執(zhí)行public boolean onTouchEvent(MotionEvent ev);
方法。
當父容器ViewGroup的onInterceptTouchEvent(MotionEvent ev)
方法返回false的時候递沪,父容器都不會攔截事件豺鼻,將會繼續(xù)分發(fā)事件給它的子ViewGroup或者子View。當ViewGroup或者View的onTouchEvent(MotionEvent ev)
返回true款慨,將不再進行事件處理的傳遞儒飒,也就是不再傳遞給上級。
事件傳遞就是這么簡單的啦檩奠,但是要靈活運用卻沒那么簡單桩了。下一篇文章我們用這個原理做一些有趣的事。