2

ギャラリーを拡張するカスタム Android コントロールを構築しています。ビューがオーバーレイされる効果が必要なので、発行しています

setSpacing(-60);

これを指定すると、ギャラリーに 3 つのアイコンが表示されます。1、3 が最初に描画され、次に 2 が中央のアイコンになります。同じルールが定義されてgetChildDrawingOrderおり、それを有効にしています

setChildrenDrawingOrderEnabled(true);

ここでの問題は、順序でルールを定義した方法でビューが描画されることです。しかし、ギャラリー コントロールのイベントは、元の表示順序、つまり 1、2、3 になります。よりよく説明するには、

1が描かれ、3が描かれ、最後に2が描かれ、重なり合っています。したがって、ビューには 1 の 50%、2 の 100%、および 3 番目のビューの 50% があります。

しかし、ビューに触れると、アンドロイドは 1 の 50%、2 の 50%、3 の 100% が画面に表示されていると想定します。もう少し明確にするために、1 つのビューの 50% の後、クリックすると 2 がフォーカスされます (これは、私の描画ルールに従って、2 が 1 の上にあるためです)。

しかし、ビュー 2 の 50% の後にどこかをクリックすると、フォーカスは 3 に移動しますが、描画の順序に従って 3 は表示されず、2 の 100% が表示されますが、ビュー 1 の領域の 50% ではフォーカスビュー2です。

イベントの順序を画面上の表示パターンに強制的に従わせることで解決できる方法について、ご意見をお聞かせください。

4

1 に答える 1

0

これらの子ビューのタッチ領域を手動で再計算する必要があります。

ほとんどの場合、 getHitRect()をオーバーライドRectして、オーバーラップ領域に従って境界が調整された独自のオブジェクトを返します。

于 2012-09-21T20:49:29.323 に答える