2

この複雑なコントロールを Android XML レイアウトに移植したいと考えています。

ボタン (ハート、クラウドなど) と中央のノブが ImageButtons として必要なので、それらは別個のオブジェクトであり、正確な位置に配置する必要があります。

問題は、そのような複雑なボタンと背景をレイアウトして、解像度の異なる複数のデバイスで正しく表示されるようにする方法です。

ここに画像の説明を入力

4

3 に答える 3

1

動的に実装することが許可されている場合、いくつかのヒントがあります:

  1. 別の画像(背景)を作成する

    • ノブの画像1枚
    • 小さなボタンごとに 1 つの画像
    • 背景用の画像 1 枚
  2. 半径

    • 背景の中心から小さ​​なボタンを配置するポイントまでの距離 (背景パターンの半径) をピクセル単位で測定します。
    • 画面ごとに異なるサイズが必要になる場合があります(解像度が異なる)
  3. ボタンを配置します

    • ノブの中心が背景の中心と一致するように、背景イメージとノブImageButtonを配置します。両方のイメージは長方形である必要があるため、中心点は対角線の交点にある必要があります。
    • 球座標を使用して小さなボタンのデカルト (x,y) 座標を取得します - それらの中心はそれらの点にある必要があります
  4. ヒットテスト

    • すべての画像の背景は透明にする必要があります
    • イベントが ImageButton 背景の非透明部分にある場合にのみ成功するヒット テストを実装できます。
  5. 回転

    • ノブを回転するには、ImageButton の背景の回転に関する詳細情報を探すことができます。私はこのようなことを試していません...
于 2013-11-11T12:29:24.170 に答える
0

onTouchEvent() をインターセプトして生のイベントを処理する必要がある場合があります。このようにして、ユーザーの指が写真のどこにあるかがわかります。

より簡単な解決策は、丸いアイコンの下にある四角いボタンを許容できる場合、RelativeLayout を使用することです。(通常-選択-押された状態の 3 つの状態。)実際には、ボタンは必要ありません。ビューをクリック可能にするだけでかまいません。

中央のノブでユーザーに何をしてもらいたいのかわかりません: 押す、2 本または 3 本の指で回すなどです。原則として、クリックできない透明な正方形のビュー (または代わりにクリック可能にする必要がありますか?アイデアは、その領域のクリックがノブによって受信されるべきではないということです)。

もう 1 つの可能な方法は、個別のボタンを実装するのではなく、コントロールの組み合わせ全体の状態ごとに 1 つの正方形の画像を用意することです。

画像の実際のサイズを確実に知る必要があります --ViewTreeObserver.OnGlobalLayoutListenerおよびgetMeasuredWidth()/を参照してくださいgetMeasuredHeight()(クリックが発生すると、後者の 2 つは既に使用されている可能性がありますが、レイアウトが発生する前はゼロが返されます)。

于 2013-11-11T10:49:07.300 に答える
0

ArcMenuまたはCircleLayoutから始めて、中央に配置されたウィジェットをサポートするようにカスタマイズできます。または、独自のレイアウトを最初から作成することもできます。その方法についての良い記事は、こちらから入手できます。

于 2013-11-11T10:54:44.910 に答える