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" .
- ¿Fondo vertical-rayado en XML?
- Uso de recursos extraíbles
- Establecer el fondo de forma transparente en android
- Android: ¿cómo usar los colores del tema actual en un xml extraíble?
- Cambiar el drawableLeft del botón cuando se hace clic en el botón
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?
- Título de la acción: Mostrar Título AND Icon
- Rectángulo dentro de otro rectángulo
- Configuración de alfa de dibujable a través de xml
- Esquinas redondeadas redondeadas de Android XML con etiqueta de mapa de bits
- Esquinas redondeadas con color de borde
- ¿Qué debo usar para un mejor rendimiento, nueve parches o un recurso xml extraíble?
- ¿Cómo conseguir el efecto de la luz del centro del gradiente del androide?
- Dibujar complejo dibujable en api inferior a 23
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);
- Monitoreo de la entrega de Android GCM
- ¿Cómo puedo obtener mi código de país del dispositivo android sin usar GPS?