この複雑なコントロールを Android XML レイアウトに移植したいと考えています。
ボタン (ハート、クラウドなど) と中央のノブが ImageButtons として必要なので、それらは別個のオブジェクトであり、正確な位置に配置する必要があります。
問題は、そのような複雑なボタンと背景をレイアウトして、解像度の異なる複数のデバイスで正しく表示されるようにする方法です。
この複雑なコントロールを Android XML レイアウトに移植したいと考えています。
ボタン (ハート、クラウドなど) と中央のノブが ImageButtons として必要なので、それらは別個のオブジェクトであり、正確な位置に配置する必要があります。
問題は、そのような複雑なボタンと背景をレイアウトして、解像度の異なる複数のデバイスで正しく表示されるようにする方法です。
動的に実装することが許可されている場合、いくつかのヒントがあります:
別の画像(背景)を作成する
半径
ボタンを配置します。
ヒットテスト
回転
onTouchEvent() をインターセプトして生のイベントを処理する必要がある場合があります。このようにして、ユーザーの指が写真のどこにあるかがわかります。
より簡単な解決策は、丸いアイコンの下にある四角いボタンを許容できる場合、RelativeLayout を使用することです。(通常-選択-押された状態の 3 つの状態。)実際には、ボタンは必要ありません。ビューをクリック可能にするだけでかまいません。
中央のノブでユーザーに何をしてもらいたいのかわかりません: 押す、2 本または 3 本の指で回すなどです。原則として、クリックできない透明な正方形のビュー (または代わりにクリック可能にする必要がありますか?アイデアは、その領域のクリックがノブによって受信されるべきではないということです)。
もう 1 つの可能な方法は、個別のボタンを実装するのではなく、コントロールの組み合わせ全体の状態ごとに 1 つの正方形の画像を用意することです。
画像の実際のサイズを確実に知る必要があります --ViewTreeObserver.OnGlobalLayoutListener
およびgetMeasuredWidth()
/を参照してくださいgetMeasuredHeight()
(クリックが発生すると、後者の 2 つは既に使用されている可能性がありますが、レイアウトが発生する前はゼロが返されます)。
ArcMenuまたはCircleLayoutから始めて、中央に配置されたウィジェットをサポートするようにカスタマイズできます。または、独自のレイアウトを最初から作成することもできます。その方法についての良い記事は、こちらから入手できます。