将旋转的drawable设置为TextView的drawableLeft

Tpo*_*6oH 6 android image

我想在TextView中旋转drawableLeft。

我尝试了这段代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

但这给我在左侧可绘制区域的空白。

实际上,即使是最简单的代码也提供了空格:

Bitmap iconBitmap = ((BitmapDrawable)originalDrawable).getBitmap();
Drawable result = new BitmapDrawable(getResources(), iconBitmap);
setCompoundDrawables(result, null, null, null);
Run Code Online (Sandbox Code Playgroud)

这个很好用:

 setCompoundDrawables(originalDrawable, null, null, null);
Run Code Online (Sandbox Code Playgroud)

sam*_*gak 5

根据文档,如果要设置drawableLeft,则应调用setCompoundDrawablesWithIntrinsicBounds(向左int,向右int,向右int,向右int)。仅当在Drawable上调用了setBounds()时,才调用setCompoundDrawables()起作用,这可能是您originalDrawable起作用的原因。

因此,将您的代码更改为:

Drawable result = rotate(degree);
setCompoundDrawablesWithIntrinsicBounds(result, null, null, null);
Run Code Online (Sandbox Code Playgroud)