Как прерывается LayerList xml в Android?

#java #android #xml #drawable #layer-list

#java #Android #xml #можно нарисовать #layer-list

Вопрос:

В объяснении списка слоев официального сайта есть пример, который я не могу понять.

Пример:

 <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/android_red" />
    </item>
    <item
        android:left="10dp"
        android:top="10dp">
        <bitmap
            android:gravity="center"
            android:src="@drawable/android_green" />
    </item>
    <item
        android:left="20dp"
        android:top="20dp">
        <bitmap
            android:gravity="center"
            android:src="@drawable/android_blue" />
    </item>
</layer-list>
 

Вывод:

Вывод

Я не могу понять две вещи:

  1. Почему красный android не находится в центре. Он единственный, у кого нет верхнего или левого смещения. Может быть, я не понимаю значения смещения сверху и слева, с какой точки вычисляется смещение?
  2. Относится ли android: gravity=»center» ко всем контейнерам или к элементу выше («его родной брат»), т. Е. Относится ли второй элемент к контейнеру или к первому элементу?

Ответ №1:

я думаю, что если вы скопируете этот код и попытаетесь изучить его, вы сможете понять идею. на самом деле красный android находится в центре, но на этом рисунке это неясно, поэтому, если вы поместите его в ImageView, он будет выглядеть так

я дал фоновому желтому цвету четкость, чтобы вы могли видеть, что красный android находится в центре.

2- android: gravity=»center» для элемента, который его содержит, обратите внимание, что элемент будет растягиваться до родительской ширины и высоты, чтобы вы могли заметить, например, что синий андроид находится в центре своего элемента, его левый верхний угол (10,10) и его нижний правый угол это то же самое, что и родительский

Комментарии:

1. Совпадает ли позиция каждого элемента (без android: top =»20dp» android: left =»20d) ?.. Кто является родителем элементов?

2. родительским элементом элементов является <layer-list> , и да, без android:top=»20dp» android:left=»20d позиция будет такой же, но когда вы поместите ее, родительский элемент (layer-list) будет растягиваться, чтобы содержать все элементы

3. Разве layerlist не соответствует размеру ImageView? Я думал, что layer- list занимает весь размер ImageView

4. да, layer-list имеет размер изображения, потому что размеры ImageView равны wrap_content , я хотел сказать следующее: пространство, которое вы видите вокруг red android, связано с «android: top=»20dp» android: left =»20d»» и «android: top =»10dp»android: left=»10d»» , без них layer-list будет точно размером с red android, но с ними layer-list вынужден быть больше, чтобы содержать всех дочерних элементов, и поэтому red android также будет иметь размер layer-list , и вот работаиз «android: gravity =»center»»

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