将图层列表转换为位图可能不起作用

Convert layer-list to bitmap not working probably

我尝试将 layer-list 转换为 bitmap,然后将此 bitmap 设置为 ImageView 的背景,但它不起作用

这是一个测试项目。我知道我可以直接将 drawable 设置为 ImageView,但我想知道为什么当我将 LayerDrawable 转换为 Bitmap 然后将 Bitmap 转换为 BitmapDrawable 然后将其设置为 ImageView 的背景, 看起来会不一样
这是我的图层列表 (ic_circle.xml)

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item>
        <shape
            android:shape="oval">
            <solid android:color="#f00"></solid>

        </shape>
    </item>
    <item
        android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp">
        <shape
            android:shape="oval">
            <solid android:color="#ff0"></solid>

        </shape>
    </item>
    <item
        android:bottom="6dp" android:left="6dp" android:right="6dp" android:top="6dp">
        <shape
            android:shape="oval">
            <solid android:color="#0ff"></solid>
        </shape>
    </item>
</layer-list>

Activity代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView img = (ImageView) findViewById(R.id.img);
        Bitmap bm = drawableToBitmap(ContextCompat.getDrawable(this, R.drawable.ic_circle));
        img.setBackground(new BitmapDrawable(bm));
    }

    public Bitmap drawableToBitmap (Drawable drawable) {
        int width = drawable.getIntrinsicWidth();
        width = width > 0 ? width : 1;
        int height = drawable.getIntrinsicHeight();
        height = height > 0 ? height : 1;

        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);

        return bitmap;
    }
}

Xml代码

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <ImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="@drawable/ic_circle"
        />


    <ImageView
        android:id="@+id/img"
        android:layout_marginTop="40dp"
        android:layout_width="80dp"
        android:layout_height="80dp"
        />

</LinearLayout>

在模拟器中,您会看到第二张图片与第一张图片不同

在您的可绘制对象中,您只定义了 2 个外部小圆圈(黄色和红色)的边界,蓝色圆圈应该 其余 space .但由于它没有定义大小,一旦你在 canvas 上绘制它,它的大小将为 0。

如果你想直接在位图上绘制它,你也必须定义它的大小。