Home » Android » bitmap – Android: BitmapDrawable.Draw(Canvas) Doesn't seem to work

bitmap – Android: BitmapDrawable.Draw(Canvas) Doesn't seem to work

Posted by: admin June 15, 2020 Leave a comment

Questions:

I am trying to tile a 20×20 background onto my Custom View but for some reason I am unable too.

    BitmapDrawable background;
    background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.back));
    background.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
    background.draw(canvas);

Does anyone have an idea why it isn’t working?

How to&Answers:

You can use BitmapDrawable, but you have to set the bounds first so it knows how much tiling to do:

BitmapDrawable background;
background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(),R.drawable.back));

//in this case, you want to tile the entire view
background.setBounds(0, 0, myView.getWidth(), myView.getHeight());

background.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
background.draw(canvas);

Answer:

You are probably getting warnings in your log regarding SKImageDecoder failing. If you are creating the resource via xml you need to retreive it via (BitmapDrawable) getResources().getdrawable(id)

Answer:

You have it backwards. Instead of passing your View’s canvas to the bitmap’s draw method, draw your Bitmap to the View’s canvas using Canvas.drawBitmap