【问题标题】:Convert GradientDrawable to Bitmap将 GradientDrawable 转换为位图
【发布时间】:2015-10-17 00:31:05
【问题描述】:

我有以下渐变(动态生成):

    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。

知道如何解决这个问题吗?

提前致谢

【问题讨论】:

  • 您真正想要实现什么?也许是一些图像?

标签: android drawable android-custom-view android-drawable android-bitmap


【解决方案1】:

我终于从您的回复中找到了解决方案。我粘贴代码以供可能需要的人使用:

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;
}

【讨论】:

  • 颜色数组、颜色字符串有什么用?
【解决方案2】:
  • 使用Bitmap.createBitmap() 创建可变位图
  • 使用new Canvas(bitmap)基于位图创建Canvas
  • 然后在您的GradientDrawable 上致电draw(canvas)

【讨论】:

  • 感谢回复,真的很有用。
  • 它是如何工作的?我的意思是,我们只使用bitmap,而我在gradient 上绘制canvas。这有点令人困惑。你能帮忙吗?
【解决方案3】:

您可以使用以下代码提及: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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多