2017-05-23 6 views
0

je suivi avec succès cet exemple: https://github.com/bumptech/glide/tree/master/samples/svg/src/main/java/com/bumptech/glide/samples/svgAndroid - Glide 4.0.0-RC0: comment définir la couleur de teinte pour ImageView après le chargement SVG

Après le chargement avec succès fichier SVG avec Glide 4.0.0-RC0, je veux mettre couleur de teinte pour ImageView, mais setColorFilter NE FONCTIONNE PAS

ma source:

package com.example.quangson.glidesvg; 

import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade; 

import android.content.ContentResolver; 
import android.graphics.PorterDuff; 
import android.graphics.drawable.PictureDrawable; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.ImageView; 
import com.bumptech.glide.RequestBuilder; 
import com.example.quangson.glidesvg.glide.GlideApp; 
import com.example.quangson.glidesvg.glide.SvgSoftwareLayerSetter; 

public class MainActivity extends AppCompatActivity { 

    private static final String TAG = "SVGActivity"; 
    private ImageView imageViewSVG; 
    private ImageView imageViewPNG; 
    private RequestBuilder<PictureDrawable> requestBuilder; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     imageViewSVG = (ImageView) findViewById(R.id.svg_image_view1); 
     imageViewPNG = (ImageView) findViewById(R.id.svg_image_view2); 

     imageViewPNG.setImageResource(R.drawable.image_mylogo); 

     requestBuilder = GlideApp.with(this) 
       .as(PictureDrawable.class) 
       .error(R.drawable.image_error) 
       .transition(withCrossFade()) 
       .listener(new SvgSoftwareLayerSetter()); 
     Uri uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getPackageName() + "/" + R.raw.android_toy_h); 
     requestBuilder.load(uri).into(imageViewSVG); 

     imageViewSVG.setColorFilter(getResources().getColor(R.color.colorAccent), PorterDuff.Mode.SRC_IN); 
     imageViewPNG.setColorFilter(getResources().getColor(R.color.colorAccent), PorterDuff.Mode.SRC_IN); 
    } 
} 

Dans ma source:

I chargé image PNG (à partir res/étirables) dans imageViewPNG et setColorFilter pour imageViewPNG ⇒ TRAVAIL

I chargé l'image SVG (de résolution/brut) dans imageViewSVG et setColorFilter pour imageViewSVG ⇒ NE FONCTIONNE PAS (Fichier SVG chargé avec succès mais ne peut pas setColorFilter)

S'il vous plaît aidez-moi à définir la couleur de la teinte pour imageViewSVG.


J'ai essayé modifier comme ci-dessous le code pour faire SvgDrawableTranscoder qui génère un BitmapDrawable (et setColorFilter après), mais cela ne fonctionne pas, aidez-moi?

package com.sonzero.chibiz.glide; 

import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Picture; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.graphics.drawable.PictureDrawable; 

import com.bumptech.glide.load.engine.Resource; 
import com.bumptech.glide.load.resource.SimpleResource; 
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder; 
import com.caverock.androidsvg.SVG; 

/** 
* Convert the {@link SVG}'s internal representation to an Android-compatible one 
* ({@link Picture}). 
*/ 
public class SvgDrawableTranscoder implements ResourceTranscoder<SVG, BitmapDrawable> { 
    @Override 
    public Resource<BitmapDrawable> transcode(Resource<SVG> toTranscode) { 
     SVG svg = toTranscode.get(); 
     Picture picture = svg.renderToPicture(); 
     PictureDrawable drawable = new PictureDrawable(picture); 
     Bitmap bitmap = asBitmap(drawable); 
     BitmapDrawable mDrawable = new BitmapDrawable(bitmap); 
     return new SimpleResource<BitmapDrawable>(mDrawable); 
    } 

    public Bitmap asBitmap(PictureDrawable pd) { 
     Bitmap bitmap = Bitmap.createBitmap(pd.getIntrinsicWidth(),pd.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     canvas.drawPicture(pd.getPicture()); 
     return bitmap; 
    } 
} 

Merci

+0

ressemble à son [non implémenté] (https://github.com/bumptech/glide/search?utf8=%E2%9C%93&q=setColorFilter&type=) soulève un problème sur github. –

+0

Il prend uniquement en charge Drawable ou GifDrawable, pas SVG. S'il vous plaît aider – Sonzero

+0

Aide comment? Vous avez besoin de quelqu'un pour l'implémenter si vous souhaitez continuer à utiliser cette bibliothèque. Vous aurez probablement besoin de le faire vous-même ou de payer quelqu'un d'autre pour le faire. –

Répondre

0

Le chargeur Glide SVG produit une PictureDrawable. Dernière que j'ai vérifié, PictureDrawables ne supporte pas la méthode setColorFilter().

Ce que vous pourriez essayer est de faire votre propre version du SvgDrawableTranscoder qui génère un BitmapDrawable à la place et dessine dedans en utilisant la méthode renderToCanvas() d'AndroidSVG.

+0

J'ai essayé éditer comme ci-dessous le code, mais ça ne fonctionne pas, pouvez-vous m'aider? – Sonzero

+0

SvgDrawableTranscoder public class implémente ResourceTranscoder { @Override ressources publique transcode (Ressource toTranscode) { SVG svg = toTranscode.get(); Image d'image = svg.renderToPicture(); PictureDrawable drawable = new ImageDrawable (image); Bitmap bitmap = asBitmap (drawable); BitmapDrawable mDrawable = new BitmapDrawable (bitmap); return new SimpleResource (mDrawable); } } – Sonzero

+0

Bitmap public asBitmap (PictureDrawable pd) { Bitmap bitmap = Bitmap.createBitmap (pd.getIntrinsicWidth(), pd.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = nouveau Canvas (bitmap); canvas.drawPicture (pd.getPicture()); bitmap de retour; } – Sonzero