事件分發: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 ...