3

I'm adding a couple of ImageView to a LinearLayout programmatically, those ImageView have its src set to R.drawable.rectangle.

I'm trying to create a rectangle with solid color that has a border only to the left.

R.drawable.rectangle looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
            <solid android:color="#000000" />
            <stroke android:width="1dp" android:color="#999" />
        </shape>
    </item>
    <item 
        android:top="0dp" android:left="1dp" android:bottom="0dp" android:right="0dp">
        <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
            <solid android:color="#283BCB"/>
            <size android:width="100dp" android:height="8dp" />
        </shape>
    </item>
</layer-list>

In my activity, I'm inflating the layout that contains the LinearLayout and I'm adding ImageViews to it programatically, that is all working. The problem is that I don't manage to manipulate the rectangle width. If I do:

imageView.getLayoutParams().width = 10;

Rectangles need to be different sizes and colors. However if I do it this way, rectangles get deformed weirdly, this doesn't happen If I don't use a layer-list, but only a shape (but that way I cannot add a left border).

So I'm guessing I need to get LayerDrawable, then get GradientDrawable and change it. However I'm not having any luck achieving this.

LayerDrawable layer = (LayerDrawable)imageView.getDrawable();
GradientDrawable rectangle = (GradientDrawable)layer.getDrawable(1);
// rectangle.setBounds
// rectangle.setColor NOT working

Any hints? thanks

IAbstract
  • 19,551
  • 15
  • 98
  • 146
maraujop
  • 4,472
  • 2
  • 36
  • 40

0 Answers0