studio programacion herramientas fundamentos con avanzado aplicaciones android xml-drawable

programacion - manual de android en pdf



Cambiar el color del borde de la forma en tiempo de ejecuciĆ³n (2)

Hola, puedes intentar crear tu fondo en tiempo de ejecución, luego puedes cambiarlo cuando quieras.

RoundRectShape rect = new RoundRectShape( new float[] {30,30, 30,30, 30,30, 30,30}, null, null); ShapeDrawable bg = new ShapeDrawable(rect); bg.getPaint().setColor(0x99FFFFFF); view.setBackgroundDrawable(bg);

Tengo esta forma en mi carpeta dibujable:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="5dp" /> <solid android:color="#ffffff" /> <stroke android:width="2dp" android:color="#B5B5B5"/> </shape>

Esto define un rectángulo con esquinas redondeadas y puedo aplicarlo como fondo a cualquier panel como este: android: background = "@ drawable / round_corner_shape" .

Aquí viene la pregunta: tengo pocos paneles en mi aplicación, con la misma forma que el fondo, pero para cada forma quiero un color de borde (trazo) diferente. No quiero crear 3 formas, la única diferencia es el color del trazo. ¿Es posible cambiar en tiempo de ejecución el valor del trazo?


Yo tuve el mismo problema. En mi caso, tuve un GridView, en el que los elementos de la cuadrícula podrían cambiar el color del borde por el usuario en el tiempo de ejecución.

Entonces, en el gridviewAdapter para esa cuadrícula, hice lo siguiente en el método getView (el que genera la vista para el adaptador)

public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.griditem, null); GradientDrawable gradientDrawable = (GradientDrawable) convertView.getBackground(); gradientDrawable.setStroke(2, mColor); convertView.invalidate(); return convertView; }

mColor es un int que representa el color, como lo hacemos en los archivos xml. En el código Java, en lugar de "#" usamos "0x" para definirlo en el formato AARRGGBB. Por ejemplo, use 0xFF000000 para BLACK opaco al 100% y 0xFF0000FF para BLUE opaco al 100%. Explicando esto aquí, ya que la API de Google ''útil'' indica que el color int es "el color del trazo".

Esto resolvió mi problema ... Supongo que puedes probar algo similar para tu caso.