外部滑動方向和內部滑動方向一致
上面兩種情況的巢狀
父容器決定事件是否攔截
[偽**]
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...