2016-02-19 36 views
7

我使用Glide加載某些圖像異步到我的一些ImageView S的,我知道它能夠處理圖像像PNGJPG,因爲它可以處理SVGGlide是否有加載PNG和SVG的方法?

事情是,據我所知,我加載這兩種圖像的方式不同。像:

加載 「正常」 圖像

Glide.with(mContext) 
       .load("URL") 
       .into(cardHolder.iv_card); 

加載SVG

GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> 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()) 
     .listener(new SvgSoftwareLayerSetter<Uri>()); 

requestBuilder 
     .diskCacheStrategy(DiskCacheStrategy.NONE) 
     .load(Uri.parse("URL")) 
     .into(cardHolder.iv_card); 

如果我嘗試用第一種方法加載SVG將無法正常工作。如果我嘗試使用第二種方法加載PNG或JPG,它也不起作用。

是否有一種通用的方式來使用Glide加載兩種圖像類型?

在我下載它之前,我從中獲取這些圖像的服務器不告訴我圖像類型。這是一個REST服務器,資源將以"http://foo.bar/resource"的方式檢索。知道圖像類型的唯一方法是讀取HEAD響應。

+0

你可能想弄清楚你的意思是*還是其他方式不行*。 – Blackbelt

+0

我編輯了我的問題。 – Mauker

回答

7

您可以使用Glide & androidSVg一起來實現您的目標。

有來自Glide for SVG的樣本。 Sample Example

設置RequestBuilder

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

使用RequestBuilder與URI

Uri uri = Uri.parse("http://upload.wikimedia.org/wikipedia/commons/e/e8/Svg_example3.svg"); 
requestBuilder 
    .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
    // SVG cannot be serialized so it's not worth to cache it 
    .load(uri) 
    .into(mImageView); 

這樣你就可以實現你的目標。我希望這是有幫助的。

+0

這正是我加載SVG的方式。但事先並不知道圖像是SVG還是PNG。所以加載可能會失敗。 – Mauker

+1

從URL你可以找到圖像是SVG或PNG然後重定向到特定requestBuilder –

+0

好吧,怎麼樣?它必須異步發生。 – Mauker