我在我的资产文件夹中有一些SVG文件,我需要动态地将它们设置在我的小部件上(ImageView上)。
我正在使用这个库:http://code.google.com/p/svg-android/
这个库返回一个Picture或PictureDrawable。
我能看到在RemoteViews上使用的唯一方法是setImageViewBitmap,显然需要一个位图。
我尝试寻找将Drawable转换为位图的代码,就像这样:
PictureDrawable pictureDrawable = svg.createPictureDrawable();
Bitmap bitmap = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(), pictureDrawable.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawPicture(pictureDrawable.getPicture());
currentBitmap = bitmap;
但位图太小了。当我在Illustrator中创建位图时,我将画板大小设置为65,这也是内在宽度/高度的大小。
我的小部件可以调整大小,因此ImageView的大小是可变的。即使我将宽度和高度静态地设置为一些大数字,例如...
Bitmap bitmap = Bitmap.createBitmap(300, 300, Config.ARGB_8888);
如果只创建了一个小图片,那么生成的位图将在下方和右侧都有大量空白。我想我需要以缩放后的值绘制图片,并创建尺寸为300的位图。理想情况下,如果我知道ImageView的大小,则可以在运行时确定正确的位图大小并设置。这是最好的方法吗?如何实现?也许还有更好的方法我不知道?
ImageView
会接管 Bitmap 并按需要重新调整其大小。话虽如此,如果您想避免重新调整大小(并且已经膨胀了层次结构),则可以使用ImageView.getMeasuredWidth()
(和 *Height())来获取视图的尺寸,并呈现适当大小的 SVG。此外,设置scaleType
为fitXY
可以避免重新采样。 - Delyan