Андроид, фон, список слоев и масштабируемый элемент растрового изображения
В качестве фона у меня есть следующий набор:
<?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).
Надеюсь, это поможет вам.