Андроид, фон, список слоев и масштабируемый элемент растрового изображения

В качестве фона у меня есть следующий набор:

<?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_bg, decoration1 и decoration2), но я не могу найти способ изменить их размер. Я хотел бы иметь основной фон и, кроме того, украшения, которые будут иметь разные размеры на основе dpi. Есть ли простой способ сделать это, или я действительно должен иметь кучу "украшений" для разных точек на дюйм? Это не хорошо, и я хотел бы иметь вариант масштабирования/изменения размера!

Атрибуты android:width и android:height - это то, что я хотел бы найти, но я знаю, что это не работает. В настоящий момент я использую разные версии для разных DPI, но надеялся, что это может быть немного более удобным для пользователя.

Ответы

Ответ 1

Я не знаю, как эти изображения, но, например, вы могли бы сделать большое изображение и использовать его в поле 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 (здесь) и Drawable (здесь) классов, Вы можете создать объект слоя с помощью 3-х Drawable Objects, а затем выбрать правильный размер для каждого объекта Drawable с помощью метода setBounds (Rect).

Надеюсь, это поможет вам.