画像の背景の事前定義された場所にビューのコレクションを配置したいと考えています。
このような:
上/左マージンまたは Android:TranslationX/Android:TranslationY を使用して、XML で各コーヒー カップ ビューの位置を設定できます。
アプリが異なるサイズの画面で起動すると、背景レイヤーが新しいレイアウトに引き伸ばされますが、ビューの上/左マージンを変更するにはどうすればよいですか?
理想的には、XML で各ビューの位置を左から x%、親の上から y% としてマークアップするだけです。(アニメーションはこのように少し動作します)。そのオプションは利用できないようです。
私が検討したいくつかの調査:
レイアウトの重み付けを使用します。垂直または水平の位置のみに関心がある場合、これで問題は解決しますが、両方を同時に行う方法がわかりません。
マージンを使用してカップを配置し、実行時にビューの上部/左マージンをスケーリングして、特定の参照画面サイズ用に設計します。これには、実行時に開始マージンを読み取り、それを参照画面の比率にリセットすることが含まれます。参照画面の幅が 1000 ピクセルで、幅が 750 ピクセルの画面で実行している場合、layoutParams を読み取り、左余白に (750/1000) を掛けて、結果の左余白をレイアウトに書き戻すことができます。しかし、getLayoutParams では余白のあるオブジェクトが表示されません。
これを機能させるのに最も近いのは、android:translationX と android:translationY を設定することです。原則として、これらの値を XML の参照画面 (たとえば 10.1 インチのタブレット) で機能するように設定し、実際に使用しているデバイスに合わせてこれらの値をスケーリングするだけでよいはずです。この方法では、適切な結果を得ることができませんでした。 -and-error 私は、Galaxy 10.1" タブの XML に生の値を設定し、Galaxy nexus (横向き) で実行している場合、getTranslationX/Y() の値に 900 を追加する必要があることを発見しました。正しく表示されました。しかし、900 は単なる恣意的な数字であり、もちろんそれらを追加すると 10.1 インチ タブの位置が台無しになるため、解決策にはなりません。
XML またはプログラムによるソリューションのいずれかで問題ありません。