Изменить нижнее свойство элемента списка слоев. Возможность рисования программно.

Я создаю LayerDrawable, который создает нижний штрих, но я не знаю, как задать нижнее поле слоя (Drawablw).

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

Я хочу программно установить нижнее поле, как указано выше.

До сих пор я сделал это:

Drawable[] list = new Drawable[2];
GradientDrawable strokeDrawable = new GradientDrawable(
    GradientDrawable.Orientation.TOP_BOTTOM, new int[] {
        strokeColor[0], strokeColor[0] });
GradientDrawable backgroundDrawable = new GradientDrawable(
    GradientDrawable.Orientation.TOP_BOTTOM, bgColor);
// Now how to set bottom margin to make border. 

list[0] = strokeDrawable;
list[1] = backgroundDrawable;

LayerDrawable layerDrawable = new LayerDrawable(list);

Кто-нибудь знает об этом?


person chandil03    schedule 22.07.2015    source источник


Ответы (2)


После долгих поисков я нашел решение, хотя оно решило мою проблему, но это не то, что я искал.

Я создал список слоев, который можно рисовать, и динамически изменил цвет его элементов. Вот код:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:id="@+id/item_bottom_stroke" >
    <shape android:shape="rectangle">
        <solid android:color="#0096FF"/>
    </shape>
</item>
<item android:id="@+id/item_navbar_background" android:bottom="1dp" >
    <shape android:shape="rectangle">
        <solid android:color="#FFFFFF"/>
    </shape>
</item>

Following code modifies above drawable at runtime to change its colors.

LayerDrawable layerDrawable = (LayerDrawable) v.getContext().getResources().getDrawable(R.drawable.layer_list_navigation_with_border);
GradientDrawable strokeDrawable = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.item_bottom_stroke);
strokeDrawable.setColor(strokeColor[0]);
GradientDrawable backgroundColor = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.item_navbar_background);
backgroundColor.setColors(bgColor);

разместил решение, думал, что кто-то может получить пользу.

person chandil03    schedule 22.07.2015

Это старый вопрос, но я решил, что все еще публикую ответ здесь на случай, если он кому-то поможет.

Чтобы программно изменить нижнее свойство списка слоев, используйте layerDrawable.setLayerInset(index, left, top, right, bottom); в этом примере вопроса:

LayerDrawable layerDrawable = (LayerDrawable) v.getContext().getResources().getDrawable(R.drawable.layer_list_navigation_with_border);
layerDrawable.setLayerInset(1, 0, 0, 0, bottom);

где bottom — значение пикселя желаемого dp.

Надеюсь, это поможет кому-то.

person Shinta S    schedule 25.10.2018