【发布时间】:2018-03-22 15:36:04
【问题描述】:
在应用程序中,我使用以下示例将 SVG 图像加载到 ImageView 中:
Glide.with(context)
.using(Glide.buildStreamModelLoader(Uri.class, context), InputStream.class)
.from(Uri.class)
.as(SVG.class)
.transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
.sourceEncoder(new StreamEncoder())
.cacheDecoder(new FileToStreamDecoder<>(new SvgDecoder()))
.decoder(new SvgDecoder())
.listener(new SvgSoftwareLayerSetter())
.diskCacheStrategy(DiskCacheStrategy.NONE)
.load(uri)
.into(imageView);
xml 中的 ImageView 如下所示:
<ImageView
android:layout_width="46dp"
android:layout_height="46dp"
android:layout_marginTop="25dp"
android:layout_gravity="center"
/>
因此,可以在下图中看到问题。右边的图标是从应用程序的资源中设置的,而左边的图标是使用 Glide 从服务器加载的。由于某种原因,图像无法正确缩放并且看起来很模糊。
我已经尝试过这个答案的解决方案: Image size too small when loading SVG with Glide,但它不起作用。
【问题讨论】:
-
尝试
Drawable d = imageView.getDrawable()并使用Log.d转储d.getClass()、d.getIntrinsicWidth()和d.getIntrinsicHeight(),现在你在logcat 上看到了什么? -
左边是:d.getIntrinsicWidth() = 46, d.getIntrinsicHeight() = 46 右边是:d.getIntrinsicWidth() = 69, d.getIntrinsicHeight() = 69
-
那么
d.getClass()呢?是android.graphics.drawable.PictureDrawable和android.graphics.drawable.BitmapDrawable吗?如果您使用更大的ImageView,getIntrinsicWidth/getIntrinsicHeight也会发生变化吗?例如 256px x 256 px -
左边是android.graphics.drawable.PictureDrawable的实例 我将ImageView的大小设置为56dp x 56dp后,内在的宽度/高度没有改变。
-
右边是android.support.graphics.drawable.VectorDrawableCompat,ImageView设置不同大小后,固有宽/高也保持不变,但图像缩放正确。
标签: java android svg android-glide