我在我的android项目中动态显示一些VectorDrawable图标。 但是,我无法使用以下代码在java层中缩放图标:
VectorDrawable jDrawable = (VectorDrawable) getContext().getDrawable(nResourceID);
// resize the icon
jDrawable.setBounds(30, 30, 30, 30);
// set the icon in the button view
button.setCompoundDrawablesRelativeWithIntrinsicBounds(jDrawable, null, null, null);
注意:Android how to resize (scale) an xml vector icon programmatically答案无法解决我的问题。
答案 0 :(得分:5)
jDrawable.setBounds
由于android中的错误而无法正常工作。
克服该错误的一种方法是将VectorDrawable
转换为Bitmap
并显示它。
Bitmap bitmap = Bitmap.createBitmap(jDrawable.getIntrinsicWidth(), jDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
jDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
jDrawable.draw(canvas);
然后使用此bitmap
显示如下所示的内容。首先将其转换为BitmapDrawable
BitmapDrawable bd = new BitmapDrawable(bitmap);
buttonsetCompoundDrawablesRelativeWithIntrinsicBounds(bd, null, null, null);
同样在您的助手功能中,您可以返回bd
。
要在23之前的API上使用它,请将其放在build.gradle
vectorDrawables.useSupportLibrary = true
答案 1 :(得分:1)
至少对于API> 21来说要容易得多。 假设我们从资源中获取了VectorDrawable(用于检索它的示例代码):
val iconResource = context.resources.getIdentifier(name, "drawable", context.packageName)
val drawable = context.resources.getDrawable(iconResource, null)
为此VectorDrawable只需设置所需的大小:
drawable.setBounds(0, 0, size, size)
并在按钮中显示可绘制对象:
button.setCompoundDrawables(null, drawable, null, null)
就是这样。但是请注意使用setCompoundDrawables(非内部版本)!