Android onTouchEvent的一些事

dispatchTouchEvent

作用是:事件分發(fā)颖御。
return true:只執(zhí)行當(dāng)前方法。
return false:傳遞到父控件的onTouchEvent()
return super.dispatchTouchEvent(ev): 1.無子類的view:傳遞到當(dāng)前控件的onTouchEvent()凝颇;2.有子類的view:傳遞到當(dāng)前控件的onInterceptTouchEvent()

可以在這里調(diào)用requestDisallowInterceptTouchEvent()方法來請求父控件的攔截事件

eg1:

 /**
 * 事件分發(fā), 請求父控件及祖宗控件是否攔截事件
 */
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (getCurrentItem() != 0) {
        getParent().requestDisallowInterceptTouchEvent(true);// 用getParent去請求,
                                                                // 不攔截
    } else {// 如果是第一個頁面, 請求父控件攔截
        getParent().requestDisallowInterceptTouchEvent(false);// 攔截
    }
    return super.dispatchTouchEvent(ev);
}

eg2:
/**
* 事件分發(fā), 請求父控件及祖宗控件是否攔截事件 1. 右劃, 而且是第一個頁面, 需要父控件攔截 2. 左劃, 而且是最后一個頁面, 需要父控件攔截
* 3. 上下滑動, 需要父控件攔截
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);// 不要攔截,
// 這樣是為了保證ACTION_MOVE調(diào)用
startX = (int) ev.getRawX();
startY = (int) ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:

        int endX = (int) ev.getRawX();
        int endY = (int) ev.getRawY();

        if (Math.abs(endX - startX) > Math.abs(endY - startY)) {// 左右滑動
            if (endX > startX) {// 右劃
                if (getCurrentItem() == 0) {// 第一個頁面, 需要父控件攔截
                    getParent().requestDisallowInterceptTouchEvent(false);
                }
            } else {// 左劃
                if (getCurrentItem() == getAdapter().getCount() - 1) {// 最后一個頁面,
                                                                        // 需要攔截
                    getParent().requestDisallowInterceptTouchEvent(false);
                }
            }
        } else {// 上下滑動
            getParent().requestDisallowInterceptTouchEvent(false);
        }

        break;

    default:
        break;
    }

    return super.dispatchTouchEvent(ev);
}

onInterceptTouchEvent

作用:其方法作用是自身控件是否對事件的消費潘拱;判斷是否傳遞給子控件。注意拧略,無子類view沒有此方法芦岂,
return true:一但返回True(代表事件在當(dāng)前的viewGroup中會被處理),則向下傳遞之路被截斷(所有子控件將沒有機(jī)會參與Touch事件)垫蛆,時把事件傳遞給當(dāng)前的控件的onTouchEvent()處理禽最;
return false:返回false,則把事件交給子控件的onInterceptTouchEvent(),傳遞到子控件的dispatchTouchEvent()
調(diào)用順序是:viewgroup.onInterceptTouchEvent->view.onInterceptTouchEvent袱饭,自上往下

onTouchEvent

作用:onTouchEvent是在view中定義的一個方法川无。處理傳遞到view 的手勢事件。手勢事件類型包括ACTION_DOWN,ACTION_MOVE,ACTION_UP,ACTION_CANCEL四種事件虑乖。
return true:消費當(dāng)前事件懦趋。
return false:false是不消費,則向上傳遞給父控件的onTouchEvent疹味;
調(diào)用順序是:view.onTouchEvent->viewgroup.onTouchEvent,自下往上
另外再講講onTouchListener的onTouch方法

onTouch

onTouch方法是View的 OnTouchListener借口中定義的方法仅叫。
當(dāng)一個View綁定了OnTouchLister后,當(dāng)有touch事件觸發(fā)時佛猛,就會調(diào)用onTouch方法。(當(dāng)把手放到View上后坠狡,onTouch方法被一遍一遍地被調(diào)用)
onTouch優(yōu)先級比onTouchEvent高继找,會先觸發(fā)。
return false: onTouchEvent()是觸發(fā)的上一層activity或者外層viewGroup的onTouchEvent()逃沿,而不是當(dāng)前view的OnTouchEvent()婴渡;
return true: 內(nèi)置諸如click事件的實現(xiàn)等等都基于onTouchEvent,這些事件將不會被觸發(fā)凯亮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末边臼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子假消,更是在濱河造成了極大的恐慌柠并,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異臼予,居然都是意外死亡鸣戴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門粘拾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窄锅,“玉大人,你說我怎么就攤上這事缰雇∪胪担” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵械哟,是天一觀的道長疏之。 經(jīng)常有香客問我,道長戒良,這世上最難降的妖魔是什么体捏? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮糯崎,結(jié)果婚禮上几缭,老公的妹妹穿的比我還像新娘。我一直安慰自己沃呢,他們只是感情好年栓,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著薄霜,像睡著了一般某抓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惰瓜,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天否副,我揣著相機(jī)與錄音,去河邊找鬼崎坊。 笑死备禀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奈揍。 我是一名探鬼主播曲尸,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼男翰!你這毒婦竟也來了另患?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蛾绎,失蹤者是張志新(化名)和其女友劉穎昆箕,沒想到半個月后鸦列,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡为严,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年敛熬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片第股。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡应民,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夕吻,到底是詐尸還是另有隱情诲锹,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布涉馅,位于F島的核電站归园,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稚矿。R本人自食惡果不足惜庸诱,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晤揣。 院中可真熱鬧桥爽,春花似錦、人聲如沸昧识。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跪楞。三九已至缀去,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甸祭,已是汗流浹背缕碎。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留池户,地道東北人咏雌。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像煞檩,于是被迫代替她去往敵國和親处嫌。 傳聞我的和親對象是個殘疾皇子栅贴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容