0

ImageView と 8 つの TextView を含む RelativeLayout があります。この画像の周りにラベルを動的に配置したいと考えています。画像を 45 度間隔で回転させ、各位置にラベルを配置するのが最善の方法だと思いましたが、Image/RelativeLayout は (invalidate が呼び出されても) 次の事前決定された onDraw 呼び出しまで再描画されず、すべての TextViewsその後、配置のためにメッセージキューに入れられるため、すべての TextView が 315 度のマークで互いの上に配置されます。

onDraw 呼び出しの後にメッセージ キューに追加されることを期待して Runnable を RelativeLayout に投稿しようとしましたが、残念ながら機能せず、アイデアが不足しています。

私の現在のコードは、私がやろうとしていることのアイデアを与えるために次のとおりです。

public void setupMenuText() {
    final float scale = getResources().getDisplayMetrics().density;

    setupMenuItemText((TextView)findViewById(R.id.menu_text_pos0), (72*scale)+0.5f);
    setupMenuItemText((TextView)findViewById(R.id.menu_text_pos1), (72*scale)+0.5f);
    setupMenuItemText((TextView)findViewById(R.id.menu_text_pos2), (72*scale)+0.5f);
    setupMenuItemText((TextView)findViewById(R.id.menu_text_pos3), (72*scale)+0.5f);
    setupMenuItemText((TextView)findViewById(R.id.menu_text_pos4), (72*scale)+0.5f);
    setupMenuItemText((TextView)findViewById(R.id.menu_text_pos5), (72*scale)+0.5f);
    setupMenuItemText((TextView)findViewById(R.id.menu_text_pos6), (72*scale)+0.5f);
    setupMenuItemText((TextView)findViewById(R.id.menu_text_pos7), (72*scale)+0.5f);
}

public void setupMenuItemText(TextView pT, float pY) {
    relativeLayout.setRotation(relativeLayout.getRotation()+45);
    pT.setText("Some Text");
    pT.setRotation(0);
    pT.setGravity(Gravity.CENTER_HORIZONTAL);
    pT.setX(0);
    pT.setY(pY);
}

編集:答えてくれたJSchoolsに感謝します。私が必要としていたものではありませんでしたが、正しい方向に向けてくれ、情報は正確でした。

同じ問題を抱えている他の人にとっては、 TextView 内のテキストを中央に配置しても切り取られません。画像に対して正確に配置されるように、手動で TextView のサイズを意図した使用よりもはるかに大きく設定する必要がありました。

4

1 に答える 1

0

個々の TextView の回転を設定する必要があります。コンテナを複数回回転させているようですが、すべての TextView がコンテナ内にあり、コンテナに対して回転がゼロであるため、積み重ねられているように見えます。コンテナをまったく回転させないでください。また、TextView が円形に配置されるように TextView の位置を設定する必要があります。それらを回転させるだけで、それらが互いにくっつきます。

于 2013-04-17T20:50:20.967 に答える