2016-02-19 67 views
0

我使用Glide加載圖片。使用Glide加載SVG時圖片尺寸太小

在我的應用程序中,我正在使用以下示例將一個SVG圖像加載到我的ImageView中,該對象位於CardView的內部。

GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder; 

requestBuilder = Glide.with(mContext) 
     .using(Glide.buildStreamModelLoader(Uri.class, mContext), InputStream.class) 
     .from(Uri.class) 
     .as(SVG.class) 
     .transcode(new SvgDrawableTranscoder(), PictureDrawable.class) 
     .sourceEncoder(new StreamEncoder()) 
     .cacheDecoder(new FileToStreamDecoder<>(new SVGDecoder())) 
     .decoder(new SVGDecoder()) 
     .placeholder(R.drawable.modulo) 
     .error(R.drawable.banner_error) 
     .animate(android.R.anim.fade_in) 
     .listener(new SvgSoftwareLayerSetter<Uri>()); 

requestBuilder 
     .diskCacheStrategy(DiskCacheStrategy.NONE) 
     .load(Uri.parse("http://foo.bar/blah")) 
     .into(cardHolder.iv_card); 

ImageView具有102dp一個固定的寬度和94dp對XML一個固定的高度。但是在加載後圖像變得比他們應該的小。難道我做錯了什麼?

的scaleType是:android:scaleType="fitXY"

img_20160219_155824

+0

您是否在ImageView上設置了scaleType屬性? – Desdroid

+0

是的,它是'android:scaleType =「fitXY」'。 – Mauker

+0

我不確定,但這可能與[此AndroidSVG問題](https://github.com/BigBadaboom/androidsvg/issues/79)有關。我還沒有時間去調查那個錯誤報告。在這種情況發生的時候,它只是'fitXY'模式嗎? –

回答

0

我決定開這個問題爲an issue on the libs repository,然後我就能夠解決問題。

事實證明,這個問題是涉及具有固定的大小我的SVG,所以要解決它,我不得不改變我的SvgDecoder.decode方法,並添加這些三行:

svg.setDocumentWidth(width); 
svg.setDocumentHeight(height); 
svg.setDocumentPreserveAspectRatio(PreserveAspectRatio.STRETCH); 

的方法現在看起來像這樣:

public Resource<SVG> decode(InputStream source, int width, int height) throws IOException { 
    try { 
     SVG svg = SVG.getFromInputStream(source); 

     svg.setDocumentWidth(width); 
     svg.setDocumentHeight(height); 
     svg.setDocumentPreserveAspectRatio(PreserveAspectRatio.STRETCH); 

     return new SimpleResource<>(svg); 
    } catch (SVGParseException ex) { 
     throw new IOException("Cannot load SVG from stream.", ex); 
    } 
} 

現在它的工作原理應該如此。