如何在 android 中创建可绘制的环形?

How to create ring shape drawable in android?

使用这段代码我只得到一个边框:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadius="15dp"
    android:thickness="2dp"
    android:useLevel="false">
    <solid android:color="#4d4d4d" />

</shape> 

如何制作如下图所示的环形:

I think using a shape in android is better than a shape in photoshop.

正确,创建可绘制对象更好,因为您可以使用代码更改颜色或形状,而不是创建新的图像资源,例如。 用 2 个 Views 和一个 TextView 创建一个 FrameLayout。第一个视图背景将是您的外环(形状),第二个视图背景将是一个圆圈(形状)。最后 View(更大的 z-index)你的 TextView:

<FrameLayout>
   <View/><!-- (outer ring)-->
   <View/><!-- (filed circle)-->
   <TextView/><!-- (text)-->
</FrameLayout>

Ring drawable是元素的并列,使用layer-list

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:right="6dip" android:left="6dip">
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
           android:innerRadius="0dp"
           android:shape="ring"
           android:thicknessRatio="3"
           android:useLevel="false" >
      <solid android:color="@android:color/transparent" />
      <stroke
          android:width="5dp"
          android:color="@color/maroon" />
    </shape>
  </item>
  <item android:right="20dip"
        android:left="20dip"
        android:bottom="0dip"
        android:top="34dip">
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
           android:shape="rectangle"
           android:innerRadius="0dp">
      <solid android:color="@color/maroon" />
      <stroke android:width="1dip" android:color="@android:color/transparent" />
    </shape>
  </item>
  <item android:right="20dip"
        android:left="20dip"
        android:bottom="34dip"
        android:top="0dip">
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
           android:shape="rectangle"
           android:innerRadius="0dp">
      <solid android:color="@color/maroon" />
      <stroke android:width="1dip" android:color="@android:color/transparent" />
    </shape>
  </item>
</layer-list>

Xml 可绘制比静态图像更有用,它们可以正确缩放而不需要 .9 库或来自 Gimp、Photoshop 的不同大小的生成集

具有 2dp 间隙的 2dp 外圈:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="4dp"
        android:right="4dp"
        android:bottom="4dp"
        android:left="4dp">
        <shape
            android:shape="oval">
            <solid android:color="#4d4d4d" />
        </shape>
    </item>
    <item>
        <shape
            android:shape="oval">
            <stroke android:width="2dp"
                android:color="#4d4d4d"/>
        </shape>
    </item>
</layer-list>

<item>
    <shape
        android:innerRadiusRatio="4"
        android:shape="ring"
        android:thicknessRatio="15"
        android:useLevel="false" >
        <solid android:color="@color/white_color" />
        <size
            android:height="48dip"
            android:width="48dip" />
    </shape>

</item>
<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="ring"
        android:innerRadius="0dp"
        android:thickness="55dp"
        android:useLevel="false">
        <solid android:color="@color/white_color"/>
        <size android:height="200dp"
            android:width="200dp"/>
        <stroke android:color="@color/green_color" android:width="5dp"/>
    </shape>
</item>

<?xml version="1.0" encoding="utf-8"
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:innerRadius="10dp" android:shape="ring" android:thickness="2dp" android:useLevel="false">
                <solid android:color="#dfdfdf" />
            </shape>
        </item>
     </selector>

您需要创建一个可绘制对象并将其设置为背景。

shape_primary_ring.xml

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadiusRatio="2.5"
    android:shape="ring"
    android:thickness="4dp"
    android:useLevel="false">

    <solid android:color="@color/colorPrimary"/>

</shape>

预览

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="120"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="140">
    <item android:id="@android:id/background">
        <shape
            android:angle="0"
            android:innerRadiusRatio="2.3"
            android:shape="ring"
            android:thicknessRatio="20.0"
            android:type="sweep"
            android:useLevel="false">
            <solid android:color="@color/red" />
        </shape>
    </item>
</layer-list>