2016-02-19 14 views
7

Sto usando Glide per caricare alcune immagini in modo asincrono in alcuni dei miei ImageView s, e so che in grado di gestire le immagini come PNG o JPG come si può gestire SVG.Glide ha un metodo per caricare sia PNG che SVG?

Il fatto è che, per quanto ne so, il modo in cui carico questi due tipi di immagine è diverso. Come:

Caricamento delle immagini "normali"

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

Caricamento 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); 

E se provo a caricare SVG con il primo metodo non funzionerà. Se provo a caricare PNG o JPG con il secondo metodo, non funzionerà neanche.

C'è un modo generico per caricare entrambi i tipi di immagine utilizzando Glide?

Il server su cui sto recuperando quelle immagini non mi dice il tipo di immagine prima di scaricarlo. È un server REST e la risorsa verrà recuperata in un modo come "http://foo.bar/resource". L'unico modo per conoscere il tipo di immagine è leggere la risposta HEAD.

+0

si potrebbe voler chiarire cosa intendi con * o viceversa non funzionerà *. – Blackbelt

+0

Ho modificato la mia domanda. – Mauker

risposta

7

È possibile utilizzare Glide & androidSVg insieme per raggiungere il proprio obiettivo.

Esiste un campione di Glide per SVG. Sample Example

Setup 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>()); 

Usa RequestBuilder con 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); 

questo modo è possibile raggiungere il tuo obiettivo. Spero che questo sia utile.

+0

Questo è esattamente il modo in cui sto caricando SVG. Ma non so in anticipo se l'immagine è un SVG o un PNG. Quindi il caricamento può fallire. – Mauker

+1

Dall'URL si può trovare l'immagine SVG o PNG, quindi reindirizzarla su richiesta particolare. Costruttore –

+0

Ok, come? E deve accadere in modo asincrono. – Mauker

Problemi correlati