XML层列表位图限制不适用于棒棒糖



我有我的xml绘制如下。它在棒棒糖和以上的棒棒糖上效果很好。但是对于prelollipop, android:tint="#888"不能在位图

上工作。
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="oval">
                <solid android:color="#1222" />
            </shape>
        </item>
        <item android:bottom="2dp" android:left="1dp" android:right="1dp" android:top="1dp">
            <shape android:shape="oval">
                <solid android:color="#eee" />
            </shape>
        </item>
        <item>
            <bitmap android:src="@drawable/ic_action_name" android:tint="#888" />
        </item>
    </layer-list>

这与在api <21的可绘制着色中报告的问题相同,但答案是使用ImageView,我不能在这里这样做,因为我正在构图我的可绘制的位图与xml中的一些形状。有解决办法吗?

您试过DrawableCompat.wrap()吗?

例子…

static Drawable drawable(Resources resources, Bitmap bitmap, int color) {
    Drawable drawable = new BitmapDrawable(resources, bitmap);
    Drawable.ConstantState state = drawable.getConstantState();
    drawable = DrawableCompat.wrap(state == null ? drawable : state.newDrawable()).mutate();
    DrawableCompat.setTint(drawable, color);
    return drawable
}

那将把Bitmap变成Drawable然后着色。

如果你需要Drawable作为Bitmap,只需使用这个或类似的…

static Bitmap bitmap(Drawable drawable) {
    if (drawable != null) {
        Bitmap bitmap= Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
        return bitmap;
    }
    return null;
}

这应该会使它回到Bitmap,尽管你可能必须在XML中设置宽度/高度。

最新更新