android的兩大基礎控制項型別:view和viewgroup。
view即普通的控制項,沒有子布局的,如button、textview. viewgroup繼承自view,表示可以有子控制項,如linearlayout、listview這些。而事件即motionevent,最重要的有3個:
(1)motionevent.action_down 按下view,是所有事件的開始
(2)motionevent.action_move 滑動事件
(3)motionevent.action_up 與down對應,表示抬起
事件傳遞機制
1、事件入口是dispatchtouchevent(),它會先執行註冊的ontouch監聽,如果一切順利的話,接著執行ontouchevent,在ontouchevent裡會執行onclick監聽。
2、無論是dispatchtouchevent還是ontouchevent,如果返回true表示這個事件已經被消費、處理了,不再往下傳了。在dispathtouchevent的原始碼裡可以看到,如果ontouchevent返回了true,那麼它也返回true。如果dispatch***在執行ontouch監聽的時候,ontouch返回了true,那麼它也返回true,這個事件提前被ontouch消費掉了。就不再執行ontouchevent了,更別說onclick監聽了。
3、我們通常在ontouch監聽了設定一旦被觸控就改變它的背景、透明度之類的,這個ontouch表示事件的時機。而在onclick監聽了去具體幹某些事。
由於我們使用控制項時進行了巢狀,導致子控制項的事件被父控制項攔截了並不再分發而導致的,常見於,listview中的button,巢狀的viewpager或是其他組合。
我們可以使用乙個類繼承,然後重寫一些時間分發的方法,某些時候讓父控制項不攔截事件,某些時候使父控制項攔截事件。
當我們的viewpager與內嵌的viewpager衝突時,我們可以使用乙個類繼承viewpager,然後重寫一些時間分發的方法,某些時候讓父控制項不攔截事件,某些時候使父控制項攔截事件。上**:
/**
* created by administrator on 2017/4/28.
* 水平方向滑動,解決事件衝突
*/public
class
horizontalscrollviewpager
extends
viewpager
public
horizontalscrollviewpager(context context, attributeset attrs)
/*** 起始座標
*/private
float startx;
private
float starty;
@override
public
boolean
dispatchtouchevent(motionevent ev)
// 2.2,當滑動到viewpager的最後乙個頁面,並且是從右到左滑動
// getparent().requestdisallowintercepttouchevent(false);
else
if((getcurrentitem()==(getadapter().getcount()-1))&& distancex <0)
// 2.3,其他,中間部分
// getparent().requestdisallowintercepttouchevent(true);
else
}else
break;
case motionevent.action_up:
break;
default:
break;
}return
super.dispatchtouchevent(ev);
}}
Android滑動衝突解決方法
dispatchtouchevent ev 偽 public boolean dispatchtouchevent motionevent ev else return consume 1.外部攔截法 重寫父view的oninterceptouchevent override public bool...
Android 滑動衝突的解決方式
外部解決滑動衝突的方式就是當我們viewgrop分發事件的時候判斷是否攔截,因為事件的分發機制就是從外向內分發,那麼我們在viewgrop分發的時候就判斷是否需要攔截就可以解決滑動衝突。內部解決滑動衝突的方式是首先讓父view不攔截事件,然後在子view中判斷是父view攔截呢還是子view攔截呢。...
小程式行內點選事件衝突解決
說明 比如這種情況下,比如tr上有乙個點選事件,第乙個cell下也有點選事件,但是點選cell時會觸發到tr的事件 view class tr bindtap parentclick view class cell bindtap childclick 1 view view class cell ...