如何在另一个环内画一个环

How to draw a ring inside another ring

我必须在圆圈内显示图标,我试图在另一个环内画一个环,但我做不到,当我尝试时它的位置很尴尬我该怎么做

我的代码

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Larger blue circle in back -->
<item>
    <shape android:shape="oval">
        <solid android:color="#f00"/>
        <size
            android:width="15dp"
            android:height="15dp"/>
    </shape>
</item>
<!-- Smaller red circle in front -->
<item>
    <shape android:shape="oval">
        <!-- transparent stroke = larger_circle_size - smaller_circle_size -->
        <stroke android:color="@android:color/transparent"
            android:width="10dp"/>
        <solid android:color="#fff"/>
        <size
            android:width="1dp"
            android:height="1dp"/>
    </shape>
</item>
<item>
    <shape android:shape="oval">
        <!-- transparent stroke = larger_circle_size - smaller_circle_size -->
        <stroke android:color="@android:color/transparent"
            android:width="11dp"/>
        <solid android:color="#f00"/>
        <size
            android:width="1dp"
            android:height="1dp"/>
    </shape>
</item>

试试我的代码。您可以根据您的要求重写这些值。 将此可绘制对象添加到任何背景时,请确保视图是正方形。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:left="6dip"
    android:right="6dip">
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval">
        <stroke
            android:width="3dip"
            android:color="#f00" />
    </shape>

</item>

<item
    android:bottom="80dip"
    android:left="80dip"
    android:right="80dip"
    android:top="80dip">

    <shape android:shape="oval">
        <stroke
            android:width="1dip"
            android:color="#0f0" />
    </shape>
</item>

</layer-list>

编辑 添加图片

尝试用Canvas画出来:

DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
Bitmap bitmap = Bitmap.createBitmap((int) (15 * metrics.density), (int) (15 * metrics.density), Bitmap.Config.ARGB_8888); // 15dp x 15dp
Canvas canvas = new Canvas(bitmap);

// clear the bitmap with a transparent color
canvas.drawColor(Color.TRANSPARENT);
Paint paint = new Paint();
paint.setStrokeWidth(2 * metrics.density); // 2dp, the circle width

// the external circle, large as the bitmap
paint.setColor(Color.RED);
canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2, paint);

// the internal one, smaller than the first one
paint.setColor(Color.GREEN);
canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2 - 3 * metrics.density, paint);

你应该调整一些数字。 DisplayMetrics 仅用于转换 dp(而不是像素)的大小。完成后,如果您需要将它用于视图(例如作为背景),您可以将 BitmapBitmapDrawable 一起使用。

试试这个代码

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:left="3dp"
    android:right="3dp">
    <shape android:shape="oval">
        <stroke android:width="5dp"
            android:color="@android:color/holo_red_dark">

        </stroke>
    </shape>
</item>
<item
    android:bottom="10dp"
    android:left="10dp"
    android:right="10dp"
    android:top="10dp">
    <shape android:shape="oval">
        <stroke android:width="10dp"
            android:color="@android:color/holo_green_dark">

        </stroke>
    </shape>
</item>

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="oval">
            <size
                android:width="200dp"
                android:height="200dp" />
            <solid android:color="@android:color/transparent" />
            <stroke android:color="#ff0000" android:width="5dp"/>
        </shape>
    </item>

    <item
        android:left="5dp"
        android:top="5dp"
        android:right="5dp"
        android:bottom="5dp">

        <shape android:shape="oval">
            <solid android:color="@android:color/transparent" />
            <stroke android:color="#5BB534" android:width="5dp"/>
        </shape>
    </item>
</layer-list>