在android對ontouch主要呼叫三個方法對觸控傳遞:
1、public boolean dispatchtouchevent(motionevent ev) //在觸控時,android首先呼叫的是這個方法,其分配何時呼叫onintercepttounch和ontouchevent,單純的返回true和false是不行的,不會呼叫者2個方法。當必須重寫這方法,又要呼叫其他2個觸控方法是,必須return super.dispatchtouchevent(ev)。
2、public boolean onintercepttouchevent(motionevent ev) // 這個方法主要用於父類對觸控事件的攔截處理,看是否需要傳遞給子類,返回false表示事件沒處理完,子類就可以接收到觸控事件了,所以這個類只有那種有可以有子控制項的viewgrop才有的,像linearlayout就有,button和textview沒有這個方法。
3、public boolean ontouchevent(motionevent ev) //處理事件
我寫了個demo對觸控事件的研究,xml布局如下:
然後對於父控制項mylinear中重寫了上面三個方法,對於不同的返回值也有備註,**如下:
@override
public boolean ontouchevent(motionevent event)
@override
public boolean onintercepttouchevent(motionevent ev)
@override
public boolean dispatchtouchevent(motionevent ev)
在子控制項mybutton中重寫了ontounchevent方法:
@override
public boolean ontouchevent(motionevent event)
return super.ontouchevent(event);
}其實關於android的ontouch觸控事件,在上面**中的注釋都寫明白了。下面我們可以用文字總結下。
當我們觸控按下的時候。
1、首先執行父控制項的dispatchtouchevent------->父控制項的onintercepttouchevent,if父控制項返回true,觸控事件不會傳遞給子view,直接呼叫父控制項的ontouchevent。
2、首先執行父控制項的dispatchtouchevent------->父控制項的onintercepttouchevent,if父控制項返回false------>傳遞給子view的ontouchevent,if子view返回false.
------->事件傳遞給父控制項的ontouchevent,子控制項的ontouchevent觸控事件消失,後續的move和up不會再執行了
3、首先執行父控制項的dispatchtouchevent------->父控制項的onintercepttouchevent,if父控制項返回false------>傳遞給子view的ontouchevent,if子view返回true.
------->事件不會傳遞給父控制項的ontouchevent,子控制項的ontouchevent觸控事件還保留了,當move或者up的時候,觸控流程事件如第二條前面的部分,先執行父控制項的
dispatchtouchevent和onintercepttouchevent,然後根據情況再執行子控制項的move或者up事件。
onTouch和onTouchEvent的區別
1.ontouch方法 ontouch方法是view的 ontouchlistener藉口中定義的方法。當乙個view繫結了ontouchlister後,當有touch事件觸發時,就會呼叫ontouch方法。當把手放到view上後,ontouch方法被一遍一遍地被呼叫 2.ontouchevent方...
onTouch事件分發
事件機制 我們知道view中有ontouch,onclick,1.並且ontouch優先於onclick執行,2.ontouch有返回值,為true時onclick並不再執行了 因為一切view都extend於view dispatchtoucheevent 還是viewgroup oninterc...
OnTouch與OnTouchEvent的區別
ontouch是view中ontouchlistener介面的乙個方法 ontouchevent是activity,view,viewgroup中的方法 在處理事件時,activity,view,viewgroup分別在ontouchevent中處理事件,只有view及其子類可以註冊事件處理程式,當...