1

いくつかの丸いビューを持つ透明なシステム オーバーレイ ウィンドウを作成したい:

ここに画像の説明を入力

グリーンビューは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);
}
4

2 に答える 2