ViewPager子View滑動事件衝突解決

2021-07-09 13:56:07 字數 1239 閱讀 8450

事件分發:public boolean dispatchtouchevent(motionevent ev)

android事件以隧道方式逐層向下傳遞。事件首先由dispatchtouchevent方法分發,分發邏輯如下:

return true;由該dispatchtouchevent方法消費並且停止分發。

return false;返回給父view的ontouch方法處理

return super.dispatchtouchevent(ev);有當前view的onintercepttouchevent()攔截處理。

事件攔截:public boolean onintercepttouchevent(motionevent ev)

當前view攔截到事件後,處理流程如下:

return false;表示放行由當前view的子view的dispatchtouchevent分發處理。

return true或return super.onintercepttouchevent()表示攔截該事件,由該view的ontouch方法處理。

事件響應:public boolean ontouchevent(motionevent ev)

return true表示消費。

return false或return super.ontouch()則此事件傳遞給上層view的ontouch方法處理。

此上是筆者關於android事件分發的一些小總結。

回到上面的問題,viewpager中子view的滑動衝突問題,筆者這裡遇到的問題是viewpager的view中巢狀乙個廣告條,廣告條是需要左右滑動的,這樣廣告條的滑動事件和viewpager很明顯會纏上衝突。筆者這裡用到的方法是,在廣告條元件中新增此方法。

? 1

2 3 4 5

@override

public boolean dispatchtouchevent(motionevent ev)

這裡dispatchtouchevent方法對事件進行分發,根據上面的總結很明顯是分發當前的onintercepttouchevent(),然後分發給當前view的ontouchevent由此處理滑動事件。同時 ? 1

getparent().requestdisallowintercepttouchevent(true);

這句話告訴父控制項此事件你就不要攔截了,由我子view自己進行處理即可。這樣即可解決此衝突問題。

ViewPager子View滑動事件衝突解決

事件分發 public boolean dispatchtouchevent motionevent ev android事件以隧道方式逐層向下傳遞。事件首先由dispatchtouchevent方法分發,分發邏輯如下 return true 由該dispatchtouchevent方法消費並且停止...

解決Gallery與viewpager滑動衝突問題

最近在專案中遇到的問題就是滑動gallery的時候與viewpager會出現衝突的情況,下面我把 貼出來,主要是通過重寫gallery來實現的,希望能幫助大家解決問題。public class mygallery extends gallery private viewpager mpager re...

使用ViewPager實現簡單滑頁

使用viewpager可以實現簡單的滑動頁面,而我寫的是基於鴻洋大神的講解,而寫作的目的只是給給自己的總結。首先,在這裡需要的準備知識就是viewpager,簡單的介紹一下,viewpager其實是類似於listview 個人見解,不喜勿噴 也是配合adapter來使用的。madapter new ...