studio rounded radius linearlayout corners corner android android-layout background android-view rounded-corners

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