TpoM6oH
TpoM6oH

Reputation: 8585

Set rotated drawable as TextView's drawableLeft

I want to rotate drawableLeft in a TextView.

I tried this code:

Drawable result = rotate(degree);
setCompoundDrawables(result, null, null, null);

private Drawable rotate(int degree)
{
    Bitmap iconBitmap = ((BitmapDrawable)originalDrawable).getBitmap();

    Matrix matrix = new Matrix();
    matrix.postRotate(degree);
    Bitmap targetBitmap = Bitmap.createBitmap(iconBitmap, 0, 0, iconBitmap.getWidth(), iconBitmap.getHeight(), matrix, true);

    return new BitmapDrawable(getResources(), targetBitmap);
}

But it gives me a blank space on the left drawable's place.

Actually, even this simplest code gives blank space:

Bitmap iconBitmap = ((BitmapDrawable)originalDrawable).getBitmap();
Drawable result = new BitmapDrawable(getResources(), iconBitmap);
setCompoundDrawables(result, null, null, null);

This one works fine:

 setCompoundDrawables(originalDrawable, null, null, null);

Upvotes: 9

Views: 6560

Answers (2)

samgak
samgak

Reputation: 24417

According to the docs, if you want to set drawableLeft you should call setCompoundDrawablesWithIntrinsicBounds (int left, int top, int right, int bottom). Calling setCompoundDrawables() only works if setBounds() has been called on the Drawable, which is probably why your originalDrawable works.

So change your code to:

Drawable result = rotate(degree);
setCompoundDrawablesWithIntrinsicBounds(result, null, null, null);

Upvotes: 5

Jim
Jim

Reputation: 10288

You can't just "cast" a Drawable to a BitmapDrawable

To convert a Drawable to a Bitmap you have to "draw" it, like this:

Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap); 
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);

See the post here:

How to convert a Drawable to a Bitmap?

Upvotes: 0

Related Questions