如何在安卓中创建环形图形?

35

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

<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> 

我该如何制作下面图片所示的环形?:

enter image description here


但是为什么你需要在Android中这样做,如果你可以在Photoshop中制作这个形状并将其用作可绘制对象呢? - Nik Myers
9
我认为在安卓应用中使用形状比在Photoshop中使用形状更好。 - S.M_Emamian
我想知道是否使用VectorDrawable也是一个不错的选择,而不是其他解决方案。 - android developer
7个回答

65

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>

1
如何使用环? - AminRah

44
你需要创建一个可绘制(drawable)并将其设置为背景。 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>

预览

Ring Drawable 预览


5
环形可绘制对象是元素的并置,使用层列表。
<?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>

enter image description here

Xml可绘制对象比静态图像更有用,它们可以在无需.9库或从Gimp、Photoshop生成不同大小的一组图像的情况下进行正确缩放。


2
我认为在Android中使用形状比在Photoshop中使用形状更好。 创建可绘制对象更好,因为您可以通过代码更改颜色或形状,而无需创建新的图像资源。 例如,创建一个带有2个视图和一个文本视图的FrameLayout。第一个视图背景将是外部环(形状),第二个视图将是填充圆(形状)。最后,最后一个视图(较大的z-index)是您的TextView:

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

2
<?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>

like This


虽然这段代码可能回答了问题,但提供有关为什么和/或如何回答问题的附加上下文可以改进其长期价值。 - Tyler2P

1

<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>


1
如何停止笔画在戒指右侧留下一条线? - Andrew S

0
<?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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接