Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo cambiar el color de la forma extraíble en el archivo de diseño

He creado una forma circular estirable. Estoy usando esto como un fondo a mi disposición linear. Está funcionando bien. Pero el problema es que quiero crear 6 círculos con diferentes colores. ¿Puedo usar una sola forma y cambiar su color para diferentes círculos?

Esta es mi forma circular

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="@color/colorPrimary" /> <size android:width="30dp" android:height="30dp"/> </shape> 

Quiero crear este diseño utilizando la forma circular con diferentes colores.

diseño: Introduzca aquí la descripción de la imagen

  • Android - ¿Cómo dividir una vista en 4 partes iguales?
  • ¿Cómo acceder a las vistas secundarias de Fragment dentro de la actividad de los padres del fragmento?
  • Agregar varias vistas personalizadas al diseño mediante programación
  • Desapareciendo el título de la barra de herramientas
  • ¿Cómo hacer que Rotate3dAnimation sea más suave?
  • Tamaño del mapa de bits de Android Widget
  • Android Spinner: centralizar el texto verticalmente dentro de la hiladora
  • El estilo AutoCompleteTextView con AppCompat.EditText no funciona
  • 2 Solutions collect form web for “Cómo cambiar el color de la forma extraíble en el archivo de diseño”

    Aunque @AbAppletic respuesta es buena, quiero añadir otra forma de resolver el problema. Puede definir una vista de círculo en java y luego usar esta vista varias veces en sus diseños xml y cambiar su color como desee. La vista del círculo:

     import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; public class Circle extends View { Paint p; int color ; public Circle(Context context) { this(context, null); } public Circle(Context context, AttributeSet attrs) { this(context, attrs, 0); } public Circle(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // real work here TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.Circle, 0, 0 ); try { color = a.getColor(R.styleable.Circle_circleColor, 0xff000000); } finally { // release the TypedArray so that it can be reused. a.recycle(); } init(); } public void init() { p = new Paint(); p.setColor(color); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); if(canvas!=null) { canvas.drawCircle(getHeight()/2, getWidth()/2,getWidth()/2,p ); } } } 

    Añada estas líneas en attrs.xml :

     <declare-styleable name="Circle"> <attr name="circleRadius" format="integer"/> <attr name="circleColor" format="color" /> </declare-styleable> 

    Y luego puede utilizar esta vista en su diseño varias veces, también se puede cambiar su fondo:

     <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <TableRow android:gravity="center"> <com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="5dp" android:background="@color/colorPrimary" app:circleColor="@color/color1" /> <com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cv2" android:layout_width="120dp" android:layout_height="120dp" android:layout_margin="5dp" android:background="@color/colorPrimary" app:circleColor="@color/color2" /> </TableRow> <TableRow android:gravity="center"> <com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cv3" android:layout_width="120dp" android:layout_height="120dp" android:layout_margin="5dp" android:background="@color/colorPrimary" app:circleColor="@color/color3" /> <com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cv4" android:layout_width="120dp" android:layout_height="120dp" android:layout_margin="5dp" android:background="@color/colorPrimary" app:circleColor="@color/color4" /> </TableRow> <TableRow android:gravity="center"> <com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cv5" android:layout_width="120dp" android:layout_height="120dp" android:layout_margin="5dp" android:background="@color/colorPrimary" app:circleColor="@color/color5" /> <com.afranet.broadbandportal.view.Circle xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cv6" android:layout_width="120dp" android:layout_height="120dp" android:layout_margin="5dp" android:background="@color/colorPrimary" app:circleColor="@color/color6" /> </TableRow> 

    Aquí está la captura de pantalla: Introduzca aquí la descripción de la imagen

    Usted puede fijar el mismo drawable (el que usted proporcionó) a todos los botones, después en su código:

    Ejemplo:

     Drawable mDrawable = ContextCompat.getDrawable(context, R.drawable.yourDrawable); mDrawable.setColorFilter(new PorterDuffColorFilter(yourColorInt,PorterDuff.Mode.MULTIPLY)); final int sdk = android.os.Build.VERSION.SDK_INT; if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { yourButton.setBackgroundDrawable(mDrawable); } else { yourButton.setBackground(mDrawable); } 

    Haga esto para cada uno de sus botones, pero recuerde reemplazar yourColorInt con el color que desea para el botón que está aplicando.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.