我想创建透明的系统覆盖窗口,它有几个圆形视图:
绿色的观点是VISIBLE
,红色的一个是INVISIBLE
。问题是我需要红色视图才能将触摸传递给底层窗口,但默认情况下不需要。
我尝试将红色视图的可见性设置为GONE
,但随后包含视图的整体大小发生了变化。由于我需要将包含视图捕捉到屏幕的右边缘,这意味着绿色视图的位置发生了变化,我不希望这样。
有什么方法可以覆盖INVISIBLE
状态下的默认触摸处理?
这是一个实际的屏幕截图,可以让我的问题更清楚:
此外,我必须重写dispatchTouchEvent()
才能正确调度触摸事件:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Circle target=null;
int targetIndex=-1;
for (int i=0; i<getChildCount(); i++) {
Circle child=(Circle) getChildAt(i);
if (child.viewMetrics.containsPoint(ev.getX(), ev.getY()) && (ev.getAction()==MotionEvent.ACTION_MOVE || child.isVisible())) {
target=child;
targetIndex=i;
break;
}
}
onMotionEvent(ev, target, targetIndex);
Log.d(">| CircularLayout", "action: "+ev.getAction()+", target: "+target);
return target!=null && target.dispatchTouchEvent(ev);
}