android應(yīng)用中onTouchEvent處理機(jī)制是什么-創(chuàng)新互聯(lián)

本篇文章為大家展示了android應(yīng)用中onTouchEvent處理機(jī)制是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

禹會(huì)網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,禹會(huì)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為禹會(huì)成百上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的禹會(huì)做網(wǎng)站的公司定做!

一、 概述

1.只有view,ViewGroup,Activity 具有事件分發(fā)和消費(fèi)的功能。

2.Activity因?yàn)樯献钕冉佑|到觸摸事件,因此Activity沒(méi)有事件攔截方法。即沒(méi)有dispatchTouchEvent方法。

3.對(duì)于不能添加子控件的view,不能對(duì)事件進(jìn)行分發(fā)和攔截,它只有onTouchEvent事件。

二、三個(gè)方法

1.public boolean dispatchTouchEvent(MotionEvent ev)

當(dāng)觸摸事件發(fā)生的時(shí)候,首先會(huì)被當(dāng)前的activity進(jìn)行分發(fā),即當(dāng)前activity的dispatchTouchEvent方法會(huì)被執(zhí)行。

這個(gè)時(shí)候,該方法有三種返回的情況:

return false: 表明事件不會(huì)被進(jìn)行分發(fā)。事件會(huì)以冒泡的方式被傳遞給上層的view或activity的onTouchEvent方法進(jìn)行消費(fèi)掉。

return true:表明該時(shí)間已經(jīng)被處理。事件會(huì)被當(dāng)前view或activity的dispatchTouchEvent給消費(fèi)掉。不會(huì)再進(jìn)行傳遞,事件到此結(jié)束。

return super.dispatchTouchEvent(ev):表明該事件將會(huì)被分發(fā)。此時(shí)當(dāng)前View的onIntercepterTouchEvent方法會(huì)捕獲該事件,判斷需不需要進(jìn)行事件的攔截。

2.public boolean onInterceptTouchEvent(MotionEvent ev)  

該方法用戶攔截被傳遞過(guò)來(lái)的事件,用于判斷被傳遞過(guò)來(lái)的事件是否需要被當(dāng)前的view進(jìn)行處理。

return false :不對(duì)事件進(jìn)行攔截,放行該事件。事件會(huì)被傳遞到當(dāng)前view的子控件中,由子控件中的dispatchTouchEvent方法進(jìn)行分發(fā)處理。

return true : 攔截該事件,將該事件交給當(dāng)前view的onTouchEvent方法進(jìn)行處理。

return super.inInterceptTouchEvent(ev):默認(rèn)攔截方式,和return true一樣。該事件會(huì)被攔截,將該事件交給當(dāng)前view的onTouchEvent方法進(jìn)行處理。(這里需要有一點(diǎn)說(shuō)明,當(dāng)有兩個(gè)view。A view中有一個(gè)B view.點(diǎn)擊A.A中如果onInterceptTouchEvent()返回super.interceptTouchEvent(ev),則事件將會(huì)被A進(jìn)行攔截,交給A的onTouchEvent()進(jìn)行處理,如果點(diǎn)擊的是B,A中如果onInterceptTouchEvent()返回super.interceptTouchEvent(ev),則事件將不會(huì)被攔截,會(huì)被分發(fā)到子控件中) 

3.public boolean onTouchEvent(MotionEvent event)

當(dāng)前的view把事件進(jìn)行了攔截,則事件則會(huì)被傳遞到該方法中

return false:表明沒(méi)有消費(fèi)該事件,事件將會(huì)以冒泡的方式一直被傳遞到上層的view或Activity中的onTouchEvent事件處理。如果最上層的view或Activity中的onTouchEvent還是返回false。則該事件將消失。接下來(lái)來(lái)的一系列事件都將會(huì)直接被上層的onTouchEvent方法捕獲

return true: 表明消費(fèi)了該事件,事件到此結(jié)束。

return super.onTouchEvent(event):默認(rèn)情況,和return false一樣。

驗(yàn)證:

MainActivity FatherView ChildView中幾個(gè)方法都返回super.****TouchEvent(ev)

分析:

1、當(dāng)點(diǎn)擊屏幕。MainActivity 中的dispatchTouchEvent方法先執(zhí)行,打印MainActivity-dispatchTouchEvent-->ACTION_DOWN

2、因?yàn)榉祷氐氖莝uper.dispatchTouchEvent(ev),所以事件ev將會(huì)被分發(fā),但是MainActivity中沒(méi)有onInterceptTouchEvent()方法,所以事件被傳遞到FatherView中的dispatchTouchEvent方法.打印FatherView-dispatchTouchEvent-->ACTION_DOWN

3、在FatherView中dispatchTouchEvent返回的是super.dispatchTouchEvent(ev),所有事件會(huì)被分發(fā)。FatherView中的onInterceptTouchEven()中的方法被執(zhí)行。打印FatherView-onInterceptTouchEven-->ACTION_DOWN

4、FatherView中的onInterceptTouchEven()返回的是super.onInterceptTouchEvent(ev)。在這里,(1)如果點(diǎn)擊的是屏幕中的ChildView。事件將不會(huì)被攔截,會(huì)被傳遞到ChildView中的dispatchTouchEvent方法中。(2)如果點(diǎn)擊的值FatherView則事件將會(huì)被攔截。FatherView中的onTouchEvent()方法將被執(zhí)行。以(1)為例,將打印ChildView-dispatchTouchEvent-->ACTION_DOWN。

5、ChildView中dispatchTouchEvent返回的是super.dispatchTouchEvent(ev),所有事件會(huì)被分發(fā)。打印ChildView-onInterceptTouchEvent-->ACTION_DOWN。

6、此時(shí)ChildView中onInterceptTouchEvent返回的是super.onInterceptTouchEvent(ev),,而且已經(jīng)沒(méi)有子控件了,所以事件將被攔截。打印ChildView-onTouchEvent-->ACTION_DOWN。

7、在childView中onTouchEvent()返回額是super.onTouchEvent(ev)。事件將不會(huì)被消耗,將以冒泡的方式傳遞到上層空間中的onTouchEvent(),此處上層空間中的onTouchEvent返回的都是super.onTouchEvent(ev)。所以講一次打印 Father-onTouchEvent-->ACTION_DOWN。 MainActivty-onTouchEvent-->ACTION_DOWN。

8、之后的事件動(dòng)作,將不再被MainActivity分發(fā)到子view,直接被MainActivty中的onTouchEvent處理消耗。打印MainActivity-dispatchTouchEvent-->ACTION_UP,MainActivty-onTouchEvent-->ACTION_UP

MainActivity-dispatchTouchEvent-->ACTION_DOWN
FatherView-dispatchTouchEvent-->ACTION_DOWN
FatherView-onInterceptTouchEven-->ACTION_DOWN
ChildView-dispatchTouchEvent-->ACTION_DOWN
ChildView-onInterceptTouchEvent-->ACTION_DOWN。
ChildView-onTouchEvent-->ACTION_DOWN
Father-onTouchEvent-->ACTION_DOWN。 
MainActivty-onTouchEvent-->ACTION_DOWN
MainActivity-dispatchTouchEvent-->ACTION_UP,
MainActivty-onTouchEvent-->ACTION_UP

名稱欄目:android應(yīng)用中onTouchEvent處理機(jī)制是什么-創(chuàng)新互聯(lián)
本文地址:http://muchs.cn/article36/dsedpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、自適應(yīng)網(wǎng)站靜態(tài)網(wǎng)站、網(wǎng)站改版、建站公司、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化