web-dev-qa-db-ja.com

アンドロイド、背景、レイヤーリスト、スケーラブルなビットマップアイテム

背景として次のドローアブルセットがあります。

<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:Android="http://schemas.Android.com/apk/res/Android">

<item>
  <bitmap Android:src="@drawable/base_bg"
    Android:gravity="bottom" />
</item>
<item Android:top="10dp" Android:left="10dp">
  <bitmap Android:src="@drawable/decoration1"
    Android:gravity="top|right" 
    Android:width="25dp" 
    Android:height="25dp"  />
</item>
<item Android:top="10dp" Android:left="10dp">
  <bitmap Android:src="@drawable/decoration2"
    Android:gravity="top|right" 
    Android:width="25dp" 
    Android:height="25dp" 
    />
</item>
</layer-list>

すべてのビットマップを表示します(base_bgdecoration1、およびdecoration2)しかし、それらのサイズを変更する方法が見つかりません。メインの背景とその上に、dpiに基づいてサイズが異なる装飾を作成したいと思います。それを行う簡単な方法はありますか、それとも実際にはさまざまなdpi用の「装飾」をたくさん用意する必要がありますか?それは良くありません、そして私は代わりにスケール/サイズ変更オプションを持ちたいです!

Android:widthおよびAndroid:height属性は私が見つけたいものですが、それが機能しないことはわかっています。現時点では、DPIごとに異なるバージョンを使用していますが、もう少しユーザーフレンドリーになることを望んでいます。

これらの画像がどのようになっているのかわかりませんが、たとえば、大きな画像を作成してアイテムのAndroid:drawableフィールドで使用すると、画像はアイテムのサイズになります。

<layer-list
xmlns:Android="http://schemas.Android.com/apk/res/Android">

<item>
  <bitmap Android:src="@drawable/base_bg"
    Android:gravity="bottom" />
</item>
<item Android:top="10dp" Android:left="10dp" Android:drawable="@drawable/decoration1">
</item>
<item Android:top="10dp" Android:left="10dp" Android:drawable="@drawable/decoration2">
</item>
</layer-list>

他の解決策は、LayerDrawable( here )およびDrawable( here )クラスを使用してプログラムでそれを行うことです。 3つのDrawableオブジェクトを使用してLayerオブジェクトを作成し、setBounds(Rect)メソッドを使用して各Drawableオブジェクトの正しいサイズを選択できます。

お役に立てば幸いです。

12
David Jesse