0

У меня есть следующий градиент (сгенерированный динамически):Преобразование в растровое изображение GradientDrawable

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

и я хочу, чтобы установить, что Drawable в представлении с помощью метода OnDraw.

Когда я хочу назначить Drawable растровому изображению, я использую кастинг (BitmapDrawable), но в этом случае невозможно, потому что gradientDrawable не может быть передан в BitmapDrawable.

Любая идея о том, как я решаю это?

Заранее спасибо

+0

Что на самом деле вы хотите достичь? может быть, какое-то изображение? – pskink

ответ

1
  • Создание изменяемых растрового изображения с помощью Bitmap.createBitmap()
  • Создание Canvas на основе растрового изображения с использованием new Canvas(bitmap)
  • Затем вызовите draw(canvas) на вашем GradientDrawable
+0

Спасибо за ответ, очень полезно. – MarcForn

+0

как это работает? Я имею в виду, тогда мы просто используем «битмап», тогда как я рисую «холст» на «градиенте». Это смущает. Вы можете помочь? – Dennis

2

я, наконец, нашел решение от вашего ответа. Я вставляю код для кого-то, кому это может понадобиться:

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; 
} 
Смежные вопросы