View的滑動沖突

1.沖突的常見場景

  • 外部滑動與內(nèi)部滑動方向不一致
  • 外部滑動和內(nèi)部滑動方向一致
  • (1)和(2)場景的嵌套出現(xiàn)

例如我們在Viewpage里面嵌套使用了ListView,這樣Viewpage是可以左右滑動的,但是listview同時還可以上下滑動,這樣就會出現(xiàn)第一情況這種的滑動沖突.但是我們可能在使用并沒有出現(xiàn)什么問題,這是因為Viewpage在內(nèi)部已經(jīng)解決了這個問題,所以我們可以正常的使用.要是我們在開發(fā)中也遇到類似問題怎么解決呢?其實解決的這個問題的方法是比較固定的,說難不難,說簡單也簡單.

2.解決沖突的辦法

解決思路是這樣的:在分發(fā)事件的過程中根據(jù)事件的特征就確定出事件到底應(yīng)該交給誰來處理,這樣就不會有沖突了.根據(jù)控制事件的分發(fā)的途徑,可以有一下兩個方法:

1.外部攔截法

public boolean onInterceptTouchEvent(MotionEvent e) {

boolean intercepted = false;

int x = (int) e.getX();

int y = (int) e.getY();

switch (e.getAction()) {

case MotionEvent.ACTION_DOWN:

intercepted = false;

break;

case MotionEvent.ACTION_MOVE: 

if (需要攔截該事件的邏輯) {

intercepter = true;

} else {

intercepted = false;

}

break;

case MotionEvent.ACTION_UP:

intercepted = false;

break;

default:

break;

}

mLastXIntercept = x;

mLastYIntercept = y;

return intercepted;

}

這段代碼是相對固定的,只需要修改攔截的邏輯就好了.有幾點需要說明一下: ACTION_DWON這個事件必須返回false,不然的話事件將無法繼續(xù)分發(fā)給子View處理了;ACTION_UP事件也要返回false,不然子View的onClick事件就無法執(zhí)行了;但是ACTION_MOVE就可以由我們自由控制決定是否要進(jìn)行攔截了.

2.內(nèi)部攔截的方法

這種方法是將所有的事件都交給內(nèi)部View去決定這個事件是自己處理還是交還給外部View處理.

public boolean dispatchTouchEvent(MotionEvent e) {

 int x = (int) e.getX();

 int y = (int) e.getY();

 swtich(e.getAction()) {

 case MotionEvent.ACTION_DOWN:

 parent.requestDisallowInterceptTouchEvent(true);

 break;

 case MotionEvent.ACTION_MOVE:

 int detalX = x - mLastX;

 int deltaY = y - mLastY;

 if (父容器需要攔截事件) {

 parent.requestDisallowInterceptTouchEvent(false);

 }

 break;

 case MotionEvent.ACTION_UP:

 break;

 default:

 break;

 }

 mLastX = x;

 mLastY = y;

 return super.dispatchTouchEvent(e);

}

public void requestDisallowInterceptTouchEvent (boolean disallowIntercept) Called when a child does not want this parent and its ancestors to intercept touch events with onInterceptTouchEvent(MotionEvent). This parent should pass this call onto its parents. This parent must obey this request for the duration of the touch (that is, only clear the flag after this parent has received an up or a cancel. Parameters – disallowIntercept True if the child does not want the parent to intercept touch events.

還要重寫外部View的onInterceptTouchEvent:

public boolean onInterceptTouchEvent(MotionEvent e) {

 int action = e.getAction();

 if (MotionEvent.ACTION_DOWN == action) {

 return false;

 } eles {

 return true;

 }

}

這里,我們把所有的事件都去交給內(nèi)部View去分發(fā)處理.
大體解決辦法就這兩種,這里(1)(2)(3)解決辦法其實根本是一樣的,只是(2)(3)僅僅通過手勢是無法解決的,必須根據(jù)我們自己程序的邏輯來確定這個問題.

附錄

以后每個知識點的實踐學(xué)習(xí)代碼會上傳到我的GitHub,歡迎大家一起學(xué)習(xí)-.-~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末占业,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纯赎,更是在濱河造成了極大的恐慌谦疾,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犬金,死亡現(xiàn)場離奇詭異念恍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)晚顷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門峰伙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人该默,你說我怎么就攤上這事瞳氓。” “怎么了栓袖?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵匣摘,是天一觀的道長。 經(jīng)常有香客問我裹刮,道長音榜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任捧弃,我火速辦了婚禮囊咏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘塔橡。我一直安慰自己,他們只是感情好霜第,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布葛家。 她就那樣靜靜地躺著,像睡著了一般泌类。 火紅的嫁衣襯著肌膚如雪癞谒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天刃榨,我揣著相機(jī)與錄音弹砚,去河邊找鬼。 笑死枢希,一個胖子當(dāng)著我的面吹牛桌吃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苞轿,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茅诱,長吁一口氣:“原來是場噩夢啊……” “哼逗物!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瑟俭,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤翎卓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后摆寄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡微饥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年逗扒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畜号。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缴阎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出简软,到底是詐尸還是另有隱情蛮拔,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布痹升,位于F島的核電站建炫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疼蛾。R本人自食惡果不足惜肛跌,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望察郁。 院中可真熱鬧衍慎,春花似錦、人聲如沸皮钠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麦轰。三九已至乔夯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間款侵,已是汗流浹背末荐。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留新锈,地道東北人甲脏。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剃幌。 傳聞我的和親對象是個殘疾皇子聋涨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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