いくつかの丸いビューを持つ透明なシステム オーバーレイ ウィンドウを作成したい:
グリーンビューは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);
}