我有我的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
中设置宽度/高度。