现在我的需求是动态的决定某个View来处理事件。这个View可能位于最顶上,也可能被别的View遮盖。
思路
1 重写Viewgroup dispatchTouchEvent,这个方法是始终都能接受到事件的
less
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_DOWN){
//根据自己的需求找出需要处理事件的View
}
}
2 第二步 View自己决定自己是否处理事件 重写 dispatchTouchEvent 来决定自己是否处理事件。
scss
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
//如果是多选模式 不存在这个问题
ViewGroup parent = (ViewGroup) getParent();
if(parent.isHasHitView()){
//判断自己是否是那个应该处理事件的View
if(this != parent.getHitView())return false;
}
return super.dispatchTouchEvent(event);
}