2012-04-07 4 views
8

Попытка использовать LayerDrawable (определенный в XML как список слоев) для наложения нескольких фигурных чертежей друг на друга; для использования в качестве фона для макета.Предотвращение масштабирования фигур в LayeredList без использования растрового изображения

Андроида руководство (for LayerList) говорит:

Все рисуем элементы масштабируются в соответствии с размером контейнера View, по умолчанию. Таким образом, размещение ваших изображений в списке слоев на разных позициях может увеличить размер представления и некоторых изображений, как . Чтобы избежать масштабирования элементов в списке, используйте элемент <bitmap> внутри элемента <item>, чтобы указать допустимый размер и определить значение силы тяжести для того, что не масштабируется, например, «центр».

Я не хочу, чтобы мои формы в масштабе, но я не уверен, как обернуть их в bitmap теги корректно: он выдает ошибку, если я делаю это следующим образом:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_one" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_two" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_three" 
      android:gravity="center" /> 
    </item> 
    <item> 
     <bitmap 
      android:src="@drawable/layer_four" 
      android:gravity="center" /> 
    </item> 
</layer-list> 

жалуясь:

Binary XML файл строка # 25: <bitmap> требуется действительный атрибут Src

Пример одной из чертежей, например. Рез/рисуем/layer_one.xml:

<?xml version="1.0" encoding="utf-8"?> 

<!-- res/drawable/layer_one.xml --> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <solid android:color="#FFFFFF"/> 
    <corners 
     android:bottomRightRadius="15dp" 
     android:bottomLeftRadius="15dp" 
     android:topLeftRadius="15dp" 
     android:topRightRadius="15dp" /> 
</shape> 

пример, используемый на сайте Android использует изображения в качестве вводимого коэффициента, а не XML, определенные формы (чтобы не сказать, что моя ошибка специфична для них, и что у меня нет где-то была глупая ошибка). Любые подсказки оценили, спасибо.


Using drawable resources
государства ответить на этот вопрос, что вы не можете использовать XML вытяжке как ГКЗ для растрового изображения. Я изменил заголовок вопроса, теперь спрошу, как можно предотвратить масштабирование фигур (таким образом, изменение размера представления контейнера) без использования bitmap, или я вынужден использовать реальные ресурсы изображения?


Добавлен образ желаемого результата - способность иметь фон с регулярной прямоугольной формы заполнены или любой другой, а затем слоистые на вершине этого, более формы вводимого коэффициента (здесь есть 3 эллипсы). Слева идеально, где верхний и левый сдвиги разрешены, и на право в порядке, в котором все формы просто перейти на позицию по умолчанию:

enter image description here

ответ

2

Да, (как на мой предыдущий answer) Вы не можете использовать xml для растровых изображений. Это нормально для сборки, но когда вы запускаете приложение, он падает.

Что касается утверждения use a <bitmap> element inside the <item> element, это означает, что вы можете определить дополнительные фигуры в своем списке слоев, и для этого он предназначен. Хотя вы также можете определить битмапы, но тогда ваши растровые изображения должны иметь значение src, относящееся к сплошному изображению (не xml).

Что вы можете сделать, это вставить слой layer_one, layer_two и другой слой в свой XML-файл layer_list. Например:

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

    <item> 
     <shape 
      android:shape="rectangle" > 
      <solid android:color="#FFFFFF" /> 

      <corners 
       android:bottomLeftRadius="15dp" 
       android:bottomRightRadius="15dp" 
       android:topLeftRadius="15dp" 
       android:topRightRadius="15dp" /> 
     </shape> 
    </item> 

    <!-- and so on with your other shapes --> 

</layer-list> 

Надеется, что это должно работать :)

+0

Sorry Waqas, забыл кавычку при цитировании с сайта Android Dev, следует читать «использовать элемент в элементе», теперь исправлен. Метод, который вы описываете, - это то, с чего я начал, но масштаб форм для заполнения родительского представления, который я пытаюсь избежать :( – ataulm

+0

Да, этот оператор по-прежнему действителен для использования растровых изображений с действительным атрибутом src (не ссылаясь на xml drawable) как выталкиваемые в списке слоев. Даже на сайте разработчика Android они используют сплошные изображения в качестве примера. Что вы пытаетесь создать? Можете ли вы разместить его как изображение? Возможно, я могу предложить вам некоторые другие решения – waqaslam

+2

. недействителен при установке силы тяжести (растрового изображения) на «центр», что предотвратит ее масштабирование. Я надеялся определить ряд заполненных эллипсов, расположенных друг на друга (уменьшая размер) в качестве фона. (Эксперимент, а не окончательный дизайн: P) Будет опубликован образ в течение 10 минут – ataulm

Смежные вопросы