Android, фон, список слоев и масштабируемый растровый элемент - PullRequest
15 голосов
/ 01 сентября 2011

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

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

1 Ответ

10 голосов
/ 13 сентября 2011

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

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

...