View的滑動衝突

2021-07-27 03:51:10 字數 1230 閱讀 4309

外部滑動方向和內部滑動方向一致

上面兩種情況的巢狀

父容器決定事件是否攔截

[偽**]

public boolean onintercepthoverevent(motionevent event)  else 

break;

case motionevent.action_up:

//必須返回false,因為action_up本身沒有太多意義

intercepted = false;

break;

default:

break;

}mlastxintercept = x;

mlastyintercept = y;

return intercepted;

}

父容器不攔截任何事件,所有的事件都傳遞給子元素,如果子元素需要此事件就直接消耗掉,否則就交由父容器進行處理。需要requestdisallowintercepttouchevent方法。

[偽**]

public boolean dispatchtouchevent(motionevent event) 

break;

case motionevent.action_up:

break;

default:

}mlastx = x;

mlasty = y;

return super.dispatchtouchevent(event);

}

除了子元素需要做處理以外,父元素也要預設攔截除了action_down以外的其他事件,這樣當子元素呼叫parent.requestdisallowintercepttouchevent(false)時,父元素才能繼續攔截所需的事件。

public boolean onintercepthoverevent(motionevent event)  else 

}

為什麼父容器不能攔截action_down?

action_down事件不接受不接受flag_disallow_intercept這個標誌位的控制,所以一旦父容器攔截action_down事件,那麼所有的事件都無法傳遞到子元素中去,這樣內部攔截也就無法起作用了。

筆記於《android藝術開發探索》

ViewPager子View滑動事件衝突解決

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

ViewPager子View滑動事件衝突解決

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

View的事件體系三 滑動衝突處理

內外滑動方向一致。內外兩層同時能上下滑動,或同時能左右滑動。前面兩種情況的巢狀。如果abs x abs y 認定為上下滑動 x 或 y為正,則滑動方向為右或下 x 或 y為負,則滑動方向為左或上 針對場景2的情況,無法根據滑動向量或速度向量來做判斷。此時只能通過介面內容所呈現的業務來做判斷 比場景2...