Cómo hacer la forma de anillo con la sección de color Android xml

Quiero crear un dibujable como este para mi barra de progreso

Forma de anillo, rebanada de color

Y he intentado este código, pero no conseguí lo que quiero

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/progress"> <shape android:innerRadiusRatio="3" android:shape="ring" android:useLevel="false"> <gradient android:centerColor="#ffff00" android:endColor="#00ff00" android:startColor="#fb0000" android:type="sweep" /> </shape> </item> </layer-list> 

Esto es lo que tengo

gradiente

¿Es posible hacer esto con sólo xml? O esto se debe hacer con código java?

2 Solutions collect form web for “Cómo hacer la forma de anillo con la sección de color Android xml”

Puesto que usted preguntó en comentarios cómo usted hace eso y no puedo poner estos acoplamientos en un comentario, le sugeriré estos tres acoplamientos. Lea y extraiga lo que quiere:

Cómo dibujar un medio círculo en android

Dibuja un semicírculo en el fondo de una vista

https://github.com/devadvance/circularseekbar

Aquí está la solución para su pregunta.

DifferentColorCircularBorder.java

 public class DifferentColorCircularBorder { private RelativeLayout parentLayout; public DifferentColorCircularBorder(RelativeLayout parentLayout) { this.parentLayout = parentLayout; } public void addBorderPortion(Context context, int color, int startDegree, int endDegree) { ProgressBar portion = getBorderPortion(context, color, startDegree, endDegree); parentLayout.addView(portion); } private ProgressBar getBorderPortion(Context context, int color, int startDegree, int endDegree) { LayoutInflater inflater = LayoutInflater.from(context); ProgressBar portion = (ProgressBar) inflater.inflate(R.layout.border_portion, parentLayout, false); portion.setRotation(startDegree); portion.setProgress(endDegree - startDegree); portion.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_ATOP); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) portion.getLayoutParams(); params.addRule(RelativeLayout.CENTER_IN_PARENT); portion.setLayoutParams(params); return portion; } } 

Border_portion.xml

 <?xml version="1.0" encoding="utf-8"?> <ProgressBar xmlns:android="http://schemas.android.com/apk/res/android" style="?android:attr/progressBarStyleHorizontal" android:layout_width="220dp" android:layout_height="220dp" android:progressDrawable="@drawable/circle_exterior" android:layout_centerInParent="true" android:max="360"/> 

Circle_exterior.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:innerRadius="100dp" android:thickness="10dp" > <solid android:color="#ff111111" /> </shape> 

MainActivity.java

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout interiorLayout = (RelativeLayout) findViewById(R.id.interior); DifferentColorCircularBorder border = new DifferentColorCircularBorder(interiorLayout); border.addBorderPortion(getApplicationContext(), ContextCompat.getColor(com.diffcolorborder.MainActivity.this, R.color.colorGoogleBlue), 0, 50); border.addBorderPortion(getApplicationContext(), ContextCompat.getColor(com.diffcolorborder.MainActivity.this, R.color.colorGoogleGreen), 50, 120); border.addBorderPortion(getApplicationContext(), ContextCompat.getColor(com.diffcolorborder.MainActivity.this, R.color.colorGoogleYellow), 120, 220); border.addBorderPortion(getApplicationContext(), ContextCompat.getColor(com.diffcolorborder.MainActivity.this, R.color.colorGoogleRed), 220, 360); } 

Activity_main.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#2d2d2d"> <RelativeLayout android:id="@+id/interior" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:layout_width="200dp" android:layout_height="200dp" android:layout_centerInParent="true" android:background="@drawable/profilepic" /> </RelativeLayout> </RelativeLayout> 

Introduzca aquí la descripción de la imagen

  • ¿Cómo puedo obtener de forma confiable un color de un AttributeSet?
  • Cómo aumentar el tamaño de transport.dump de 256 bytes a 512 o más bytes en KSOAP2?
  • Android: ¿es posible agregar un enlace que se puede hacer clic en un recurso de cadena
  • Estilo de todas las vistas de texto (o vista personalizada) sin agregar el atributo de estilo a cada TextView
  • Xamarin.Android: ¿Cómo capturar eventos Button definidos en el atributo OnClick XML?
  • TextView no se muestra en la parte superior del mapa de Google
  • Widget de conexión de Android facebook: org.json.JSONException
  • El soporte de diseño de derecha a izquierda está causando problemas de advertencia en el editor de xml
  • Cómo clasificar los componentes de Android según el tamaño de la imagen mediante XML
  • API de gráficos para Android
  • FindViewById () devuelve null para el componente personalizado en XML de presentación, no para otros componentes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.