Подтвердить что ты не робот

Как изменить список слоев?

Пытаясь узнать что-то новое и не может понять это, любая помощь приветствуется. Учитывая этот простой код, который прямо из документации Google:

layers.xml:

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

И main.xml:

<ImageView
    android:id="@+myImageView"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

Вопрос: Как программно ссылаться на один из чертежей в списке слоев, чтобы я мог изменить его на другой способ?

Спасибо.

Итак, теперь у меня есть мой новый drawable, который я хочу поменять в переменной myImage правильно? Теперь, как я могу получить это в списке слоев? Я предполагаю, что использую findDrawableByLayerId и setDrawableByLayerId, но как именно? Или я могу сделать это совершенно неправильно! Помогите!

Что я пытаюсь сделать? Измените отображаемый. Например, предположим, что у меня есть еще один drawable, называемый "android_purple", как бы включить его для "android_green", который можно извлечь в приведенном выше примере списка слоев?

EDIT:

С моими ограниченными знаниями вот мой код до сих пор (который не работает, я получаю ошибку, что setDrawableByLayerId есть undefined):

Resources res = getApplicationContext().getResources();
BitmapDrawable newImage = (BitmapDrawable) res.getDrawable(R.drawable.android_purple); //Get replacement image, can't use LayerDrawable or get error.   
boolean layer_drawable_changed = (setDrawableByLayerId((R.id.second_image), newImage)); //Set new drawable? Error on this line.
4b9b3361

Ответ 1

Вопрос: Как программно ссылаться на один из чертежей в списке слоев, чтобы я мог изменить его на другой способ?

Вот что я хотел бы попробовать:

Шаг # 1: Поместите атрибуты android:id в элементы <item>, как показано на рисунке в документации

Шаг # 2: Приведите результат getDrawable() в LayerDrawable

Шаг №3: Вызов mutate(), если вы не хотите влиять на кого-либо еще с помощью Drawable (может быть необязательным)

Шаг №4: Вызов setDrawableByLayerId() для установки/замены a Drawable для данного идентификатора слоя

Ответ 2

Шаг 1: Извлеките список слоев из выпадающей папки: (Mine был вызван цифрами в /res/drawable/digits.xml)

LayerDrawable ld = (LayerDrawable) getResources().getDrawable(R.drawable.digits);

Шаг 2: Назовите заменяющее изображение (а не изображение уже в списке слоев)

Drawable replace = (Drawable) getResources().getDrawable(R.drawable.replacing_image);

Шаг 3: Замените изображение с помощью метода setDrawableByLayerId (int id, Drawable d)

boolean testfactor = ld.setDrawableByLayerId(R.id.first_image, replace);

Это возвращает логическое значение, которое вернет false, если не удалось заменить изображение

Шаг 4: Загрузка основного изображения (в основном, идентификатор списка слоев в фактическом коде компоновки xml)

ImageView layoutlist1 = (ImageView)findViewById(R.id.layout_list1);

Шаг 5: (re) -Установите изображение с обновленным LayerDrawable, сказав:

layoutlist1.setImageDrawable(ld);

РЕСУРСЫ: Я разработчик программного обеспечения и мобильных приложений.

Я посмотрел по сети и много из Stackflow.com, чтобы добраться до этого момента. Все ответы были похожи на те, что были на этой странице. Я пытался сделать то же самое. Затем я подумал об идее "обновления изображения" и пришел к этому.

Этот должен/также работать, если вы хотите поместить Bitmap вместо одного из элементов в вашем списке. Вам просто нужно использовать метод replace (setDrawableByLayerId). для замены на идентификаторы. ImageView имеет множество методов.

Это также помогло: LayerList drawable + преобразование в растровое изображение