2016-02-19 2 views
7

Ich verwende Glide einige Bilder asynchron in einige meiner ImageView s zu laden, und ich weiß, dass es Bilder wie PNG oder JPG wie es SVG verarbeiten kann verarbeiten kann.Verfügt Glide über eine Methode zum Laden von PNG und SVG?

Die Sache ist, soweit ich weiß, unterscheidet sich die Art, wie ich diese beiden Arten von Bildern lade. Wie:

Laden "normale" Bilder

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

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

Und wenn ich versuche, SVG mit dem ersten Verfahren zum Laden wird es nicht funktionieren. Wenn ich versuche, PNG oder JPG mit der zweiten Methode zu laden, wird es auch nicht funktionieren.

Gibt es eine generische Möglichkeit, beide Bildtypen mit Glide zu laden?

Der Server, von dem ich diese Bilder abrufe, sagt mir nicht den Bildtyp, bevor ich ihn herunterlade. Es ist ein REST-Server und die Ressource wird wie "http://foo.bar/resource" abgerufen. Die einzige Möglichkeit, den Bildtyp zu kennen, ist das Lesen der HEAD-Antwort.

+0

möchten Sie vielleicht klarstellen, was Sie mit * meinen, oder andersherum wird es nicht funktionieren *. – Blackbelt

+0

Ich habe meine Frage bearbeitet. – Mauker

Antwort

7

Sie können Glide & androidSVg zusammen verwenden, um Ihr Ziel zu erreichen.

Es gibt Probe von Glide für 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>()); 

Verwenden RequestBuilder mit 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); 

diese Weise können Sie Ihr Ziel erreichen können. Ich hoffe, das ist hilfreich.

+0

Genau so lade ich SVG's. Aber ich weiß vorher nicht, ob das Bild ein SVG oder ein PNG ist. So kann das Laden fehlschlagen. – Mauker

+1

Von URL finden Sie das Bild ist SVG oder PNG dann umleiten es auf bestimmte AnfrageBuilder –

+0

Okay, wie? Und es muss asynchron geschehen. – Mauker