5

How do I use obtain a drawable from a Shader (such as LinearGradient) so that I can use it as a background in my UI?

Casebash
  • 114,675
  • 90
  • 247
  • 350

1 Answers1

19

Since the background will probably need to resize, we will use a ShaderFactory to produce the Shader:

ShapeDrawable.ShaderFactory sf=new ShapeDrawable.ShaderFactory() {
    @Override
    public Shader resize(int width, int height) {
        return new LinearGradient(0, 0, width, height,
            new int[]{Color.WHITE, Color.GRAY, Color.BLACK},
            new float[]{0,0.5f,1}, Shader.TileMode.MIRROR);
    }
};

We use this to create a PaintDrawable which we can use as a background:

PaintDrawable p=new PaintDrawable();
p.setShape(new RectShape());
p.setShaderFactory(sf);
getWindow().setBackgroundDrawable(p);

This is just an example and in this case it would actually be better to just declare this using XML. Look at the example here.

Community
  • 1
  • 1
Casebash
  • 114,675
  • 90
  • 247
  • 350