Cambiar el color del borde de la forma en tiempo de ejecución

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 las esquinas redondeadas y puedo aplicarlo como fondo a cualquier panel como esto: android: background = "@ drawable / round_corner_shape" .

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

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

Por lo tanto, 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, al igual que lo hacemos en los archivos xml. En el código java, en lugar de "#" usamos "0x" para definirlo en el formato AARRGGBB. Por ejemplo, utilice 0xFF000000 para 100% opaco NEGRO y 0xFF0000FF para 100% opaco AZUL. Explicando esto aquí ya que el google api 'útil' dice que el color int es "el color de la carrera".

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

Hola usted puede intentar crear su fondo en tiempo de ejecución, después usted puede cambiarlo siempre que usted desee.

 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); 
  • Cómo guardar, exportar o convertir un Android XML Drawable como un archivo de imagen PNG?
  • Barra de progreso circular Android con esquinas redondeadas
  • Extraño borde negro alrededor de XML extraíble android
  • Escala Dibujable - ¿setImageLevel determina la escala?
  • Brillante degradado con dibujable androide xml
  • ¿Es posible crear una anchura fija en XML?
  • Entender la <lista de capas> de Android
  • ¿Cómo hago un dibujable de varias imágenes?
  • Problema de representación de Android Drawable (Barra de progreso, Interruptor)
  • Forma del androide con el movimiento inferior
  • La línea punteada no está punteada cuando la aplicación se está ejecutando en un dispositivo Android real
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.