2016-12-31 1 views
0

je charger des images en utilisant Glide comme par exemple:Enregistrer l'image une fois Glide a chargé il

Glide.with(getContext()).load(apdInfo.url) 
     .thumbnail(0.5f) 
     .crossFade() 
     .diskCacheStrategy(DiskCacheStrategy.ALL) 
     .into(apd_image); 

et que vous souhaitez enregistrer le Bitmap chargé comme tel:

private void saveImage() { 
    final ImageView apd_image = (ImageView) view.findViewById(R.id.apd_image); 
    final InternalFileHandler IFH = new InternalFileHandler(getContext()); 

    apd_image.setDrawingCacheEnabled(true); 
    apd_image.buildDrawingCache(true); 
    Bitmap bitmap = apd_image.getDrawingCache(); 

    // Simply saves the bitmap in the filesystem 
    IFH.savePicture("APD", bitmap, getContext()); 
    apd_image.destroyDrawingCache(); 
} 

Le problème est que si je l'appelle saveImage avant Glide a chargé ma photo, cela ne fonctionnera pas.

Comment puis-je attendre ou Glide pour le charger? Veuillez noter que l'utilisation des écouteurs de Glide n'a pas fonctionné.

EDIT:

J'utilise maintenant les auditeurs suivants:

.listener(new RequestListener<String, GlideDrawable>() { 
       @Override 
       public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 
        //handle the exception. 
        return true; 
       } 

       @Override 
       public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 
        // onResourceReady is called twice for some reason, this is my work around for now 
        if (first) { 
         GlideBitmapDrawable glideBitmapDrawable = (GlideBitmapDrawable) resource; 
         // Convert to Bitmap 
         Bitmap bm = glideBitmapDrawable.getBitmap(); 
         saveImage(bm); 
         first = false; 
        } else { 
         first = true; 
        } 
        return true; 
       } 
      }) 
+0

Qu'est-ce qui n'a pas fonctionné et comment? –

Répondre

1

Utilisez l'auditeur de sorte que lorsque l'image est récupérée et prêt à être utilisé, vous pouvez l'enregistrer en utilisant la méthode saveImage de la vôtre.

Faites ceci:

Glide.with(getContext()).load(apdInfo.url) 
    .thumbnail(0.5f) 
    .crossFade() 
    .diskCacheStrategy(DiskCacheStrategy.ALL) 
    .into(new SimpleTarget<GlideDrawable>() { 
       @Override 
       public void onResourceReady(GlideDrawable glideDrawable, GlideAnimation<? super GlideDrawable> glideAnimation) { 
        apd_image.setImageDrawable(glideDrawable); 
        apd_image.setDrawingCacheEnabled(true); 
        saveImage(); 
     }}); 

Appelez la méthode saveImage à l'intérieur de rappel onResourceReady() et utiliser la ressource GlideDrawable. Je suggère d'utiliser le GlideDrawable plutôt que d'obtenir l'image en utilisant Drawing Cache.

+0

Il ne semble pas enregistrer mon image, peut-être parce que j'utilise Dessin Cache comme vous l'avez dit, comment puis-je utiliser GlideDrawable dans ce cas? –

+0

Vous avez juste besoin de changer GlideDrawable en Bitmap, puis d'appeler votre méthode IHF.savePicture (...). –

+0

Et comment puis-je convertir un GlideDrawable en bitmap? –