rounded - shape corners android
Cómo programar curvas programáticamente y establecer colores de fondo aleatorios (5)
Creo que la forma más rápida de hacerlo es:
GradientDrawable gradientDrawable = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, //set a gradient direction
new int[] {0xFF757775,0xFF151515}); //set the color of gradient
gradientDrawable.setCornerRadius(10f); //set corner radius
//Apply background to your view
View view = (RelativeLayout) findViewById( R.id.my_view );
if(Build.VERSION.SDK_INT>=16)
view.setBackground(gradientDrawable);
else view.setBackgroundDrawable(gradientDrawable);
Me gustaría redondear las esquinas de una vista y también cambiar el color de la vista en función del contenido en tiempo de ejecución.
TextView v = new TextView(context);
v.setText(tagsList.get(i));
if(i%2 == 0){
v.setBackgroundColor(Color.RED);
}else{
v.setBackgroundColor(Color.BLUE);
}
v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
v.setPadding(twoDP, twoDP, twoDP, twoDP);
v.setBackgroundResource(R.drawable.tags_rounded_corners);
Esperaba establecer un dibujable y el color se superpondría, pero no es así. Cualquiera que ejecute en segundo lugar es el fondo resultante.
¿Hay alguna forma de crear esta vista mediante programación, teniendo en cuenta que el color de fondo no se decidirá hasta el tiempo de ejecución?
editar: solo estoy intercambiando entre rojo y azul ahora para probar. Más tarde, el color será elegible por el usuario.
editar:
tags_rounded_corners.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners
android:bottomRightRadius="2dp"
android:bottomLeftRadius="2dp"
android:topLeftRadius="2dp"
android:topRightRadius="2dp"/>
</shape>
En lugar de setBackgroundColor
, recupera el fondo dibujable y establece su color:
v.setBackgroundResource(R.drawable.tags_rounded_corners);
GradientDrawable drawable = (GradientDrawable) v.getBackground();
if (i % 2 == 0) {
drawable.setColor(Color.RED);
} else {
drawable.setColor(Color.BLUE);
}
Además, puedes definir el relleno dentro de tus tags_rounded_corners.xml
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="4dp" />
<padding
android:top="2dp"
android:left="2dp"
android:bottom="2dp"
android:right="2dp" />
</shape>
Enfoque programático total para establecer esquinas redondeadas y agregar color de fondo aleatorio a una vista. No probé el código, pero entiendes la idea.
GradientDrawable shape = new GradientDrawable();
shape.setCornerRadius( 8 );
// add some color
// You can add your random color generator here
// and set color
if (i % 2 == 0) {
shape.setColor(Color.RED);
} else {
shape.setColor(Color.BLUE);
}
// now find your view and add background to it
View view = (LinearLayout) findViewById( R.id.my_view );
view.setBackground(shape);
Aquí estamos usando drawable de degradado para que podamos utilizar GradientDrawable#setCornerRadius
porque ShapeDrawable
NO proporciona ningún método de este tipo.
Puede lograrlo utilizando el DrawableCompat esta manera:
Drawable backgroundDrawable = view.getBackground();
DrawableCompat.setTint(backgroundDrawable, newColor);
Si no tiene un ataque cerebral, puede usar
colorDrawable = resources.getDrawable(R.drawable.x_sd_circle);
colorDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
pero esto también cambiará el color del trazo