Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Shader as a drawable (Android)

Tags:

android

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?

like image 672
Casebash Avatar asked Dec 03 '22 05:12

Casebash


1 Answers

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.

like image 92
Casebash Avatar answered Jan 01 '23 19:01

Casebash