将 GradientDrawable 转换为位图
Convert GradientDrawable to Bitmap
我有以下渐变(动态生成):
GradientDrawable dynamicDrawable = new GradientDrawable();
dynamicDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
dynamicDrawable.setUseLevel(false);
int colors[] = new int[3];
colors[0] = Color.parseColor("#711234");
colors[1] = Color.parseColor("#269869");
colors[2] = Color.parseColor("#269869");
dynamicDrawable.setColors(colors);
并且我想使用 onDraw 方法在视图中设置该可绘制对象。
当我想将 Drawable 分配给位图时,我使用转换 (BitmapDrawable),但在那种情况下是不可能的,因为 gradientDrawable 无法转换为 BitmapDrawable。
知道我是如何解决这个问题的吗?
提前致谢
- 使用
Bitmap.createBitmap()
创建可变位图
- 使用
new Canvas(bitmap)
基于位图创建 Canvas
- 然后在您的
GradientDrawable
上致电 draw(canvas)
我终于从你的回复中找到了解决办法。我粘贴代码以供可能需要的人使用:
private Bitmap createDynamicGradient(String color) {
int colors[] = new int[3];
colors[0] = Color.parseColor(color);
colors[1] = Color.parseColor("#123456");
colors[2] = Color.parseColor("#123456");
LinearGradient gradient = new LinearGradient(0, 0, 0, 400, Color.RED, Color.TRANSPARENT, Shader.TileMode.CLAMP);
Paint p = new Paint();
p.setDither(true);
p.setShader(gradient);
Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawRect(new RectF(0, 0, getWidth(), getHeight()), p);
return bitmap;
}
您可以使用下面提到的代码:Android: Convert Drawable to Bitmap
public Bitmap convertToBitmap(Drawable drawable, int widthPixels, int heightPixels) {
Bitmap mutableBitmap = Bitmap.createBitmap(widthPixels, heightPixels, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(mutableBitmap);
drawable.setBounds(0, 0, widthPixels, heightPixels);
drawable.draw(canvas);
return mutableBitmap;
}
我有以下渐变(动态生成):
GradientDrawable dynamicDrawable = new GradientDrawable();
dynamicDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
dynamicDrawable.setUseLevel(false);
int colors[] = new int[3];
colors[0] = Color.parseColor("#711234");
colors[1] = Color.parseColor("#269869");
colors[2] = Color.parseColor("#269869");
dynamicDrawable.setColors(colors);
并且我想使用 onDraw 方法在视图中设置该可绘制对象。
当我想将 Drawable 分配给位图时,我使用转换 (BitmapDrawable),但在那种情况下是不可能的,因为 gradientDrawable 无法转换为 BitmapDrawable。
知道我是如何解决这个问题的吗?
提前致谢
- 使用
Bitmap.createBitmap()
创建可变位图
- 使用
new Canvas(bitmap)
基于位图创建 - 然后在您的
GradientDrawable
上致电
Canvas
draw(canvas)
我终于从你的回复中找到了解决办法。我粘贴代码以供可能需要的人使用:
private Bitmap createDynamicGradient(String color) {
int colors[] = new int[3];
colors[0] = Color.parseColor(color);
colors[1] = Color.parseColor("#123456");
colors[2] = Color.parseColor("#123456");
LinearGradient gradient = new LinearGradient(0, 0, 0, 400, Color.RED, Color.TRANSPARENT, Shader.TileMode.CLAMP);
Paint p = new Paint();
p.setDither(true);
p.setShader(gradient);
Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawRect(new RectF(0, 0, getWidth(), getHeight()), p);
return bitmap;
}
您可以使用下面提到的代码:Android: Convert Drawable to Bitmap
public Bitmap convertToBitmap(Drawable drawable, int widthPixels, int heightPixels) {
Bitmap mutableBitmap = Bitmap.createBitmap(widthPixels, heightPixels, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(mutableBitmap);
drawable.setBounds(0, 0, widthPixels, heightPixels);
drawable.draw(canvas);
return mutableBitmap;
}