Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Change Shape Color in runtime

I have a drawable that i use as a Background for a LinearLayout. I would like to change the color of this Shape in runtime. I have tried using several methods.. but none work.

I've followed the approach described here: http://www.anddev.org/android-2d-3d-graphics-opengl-problems-f55/change-shape-drawable-solid-color-t16798.html

But have the same problem... it doesnt crashes.. but the color doesnt change!

<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android">     <solid android:color="#00A6C1" />     <corners android:radius="@dimen/square_corners" /> </shape> 

Snippet of code:

GradientDrawable drawable = (GradientDrawable) activity.getResources().getDrawable(R.drawable.blue_square_shape);   int color = ((Application) getApplication()).getColor(); drawable.setColor(color);  block.findViewById(R.id.blockSquare).setBackgroundDrawable(drawable);  findViewById(R.id.blockSquare).postInvalidate(); 

Any clue? I've passed the whole day googling... and it's getting pretty annoying...

UPDATE:

When i try to do the same to this Shape:

<shape xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/shape" android:shape="rectangle">     <gradient android:startColor="#1FBCCF" android:endColor="#06A4C1"         android:angle="270" />     <corners android:topLeftRadius="@dimen/footer_corners"         android:topRightRadius="@dimen/footer_corners" /> </shape> 

The color turns to black... what i guess tells it can be changed...

like image 829
neteinstein Avatar asked May 09 '11 18:05

neteinstein


People also ask

How to change color of drawable shape in android?

To change the background color programatically, try to get the shape drawable and then use SetTint to change the color value. Check the code: //layout.

What is gradient drawable?

Designers are trying out different styles and combinations which go best with the Android App. One of the key components of Android being used these days is called GradientDrawable. A GradientDrawable is drawable with a color gradient for buttons, backgrounds, etc.


1 Answers

I'm now creating a Drawable like the one pre-compiler.. as i couldn't change the color to anything but black, even after trying the hex OR described below.

The new code:

ShapeDrawable footerBackground = new ShapeDrawable();  // The corners are ordered top-left, top-right, bottom-right, // bottom-left. For each corner, the array contains 2 values, [X_radius, // Y_radius] float[] radii = new float[8]; radii[0] = activity.getResources().getDimension(R.dimen.footer_corners); radii[1] = activity.getResources().getDimension(R.dimen.footer_corners);  radii[2] = activity.getResources().getDimension(R.dimen.footer_corners); radii[3] = activity.getResources().getDimension(R.dimen.footer_corners);  footerBackground.setShape(new RoundRectShape(radii, null, null));  int color = ((Application) activity.getApplication()).getColor();  footerBackground.getPaint().setColor(color);  views.setBackgroundDrawable(footerBackground); 

Anyway this is a fix.. a solution for the first question is what i'm really looking for! I'll appreciate any help of course!

like image 175
neteinstein Avatar answered Sep 24 '22 21:09

neteinstein