web-dev-qa-db-fra.com

Android Glide: Afficher une image floue avant de charger l'image réelle

Je développe une application Android qui affiche des images en plein écran à l'utilisateur. Les images sont extraites du serveur. J'utilise Glide pour afficher l'image. Mais je veux afficher une image floue de très petite taille avant d'afficher l'image réelle. Une fois que l'image est mise en cache, l'image directement en taille réelle doit être affichée.

Image L'affichage des flux va comme suit: - Si l'image est téléchargée pour la première fois, commencez par télécharger une image à petite échelle, puis téléchargez l'image en pleine résolution. .

Je ne trouve aucune méthode dans la bibliothèque Glide qui me dise si un fichier existe en cache ou non.

Toute idée, comment cela peut être fait. 

11
Abhishek Batra
Glide.with(context.getApplicationContext())
                        .load(Your Path)   //passing your url to load image.
                        .override(18, 18)  //just set override like this
                        .error(R.drawable.placeholder)
                        .listener(glide_callback)
                        .animate(R.anim.rotate_backward)
                        .centerCrop()
                        .into(image.score);
9
Hiren

Mieux vaut avoir une idée de cette bibliothèque ou utiliser cette bibliothèque.

2 façons de faire du flou et de l'image originale dans Android.

1) Initialement, chargez le chemin d’URL de Blur Image Server et, une fois, le mécanisme de mise en cache des images bitmap de succès pour charger le chemin d’URL d’origine (Large) Image Server.

Le point 1 est possible, j'ai la réponse pour vous (Demandez à votre équipe de serveurs d'obtenir une image de flou ou une image de qualité inférieure pour créer un flou puis charger une grande image) . APK Link

Glide.with(mContext)
    .load(image.getMedium())
            .asBitmap()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
                    // Do something with bitmap here.
                    holder.thumbnail.setImageBitmap(bitmap);
                    Log.e("GalleryAdapter","Glide getMedium ");

                    Glide.with(mContext)
                            .load(image.getLarge())
                            .asBitmap()
                            .diskCacheStrategy(DiskCacheStrategy.ALL)
                            .into(new SimpleTarget<Bitmap>() {
                                @Override
                                public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
                                    // Do something with bitmap here.
                                    holder.thumbnail.setImageBitmap(bitmap);
                                    Log.e("GalleryAdapter","Glide getLarge ");
                                }
                            });
                }
            });

2) Fresco by Facebook est une nouvelle bibliothèque d’images pour Android. Voici le blog officiel présentant la bibliothèque. Il prend en charge la diffusion en continu d'images JPEG progressives sur le réseau, ce qui peut s'avérer très utile pour afficher des images volumineuses sur des connexions lentes. On peut voir que l'image s'améliore progressivement en qualité.

JPEG progressifs avec Facebook Fresco

5
Karthik Pugal

avec Glide v4:

Glide.with(context)
    .load(URL)
    .thumbnail(0.1f)
    .into(image_view)
5
itzhar

Utilisez BitmapFactory.Options.inSampleSize pour créer une version suréchantillonnée de l'image et téléchargez les versions les deux. Chargez l'exemple d'image (ce qui devrait prendre moins de temps) et, lorsque la version plus grande est téléchargée, basculez vers celui-là. Vous pouvez également utiliser TransitionDrawable pour créer une transition en fondu.

0
jv110

ce n’est pas un moyen parfait mais ce sera le moyen le plus simple de le faire.

rendre l'image de lieuHolder aussi floue et la mettre en glisse. puis toujours, il affichera une image floue, puis, après avoir chargé l'image réelle, il apparaîtra.

vous pouvez vous référer à ce code pour utiliser le glissement.

//crete this method into your Utils class and call this method wherever you want to use.
//you can set these placeHolder() and error() image static as well. I made it as comment inside this method, then no need to use [placeHolderUrl and errorImageUrl] parameters. remove it from this method.
public static void loadImage(final Activity context, ImageView imageView, String url, int placeHolderUrl, int errorImageUrl) {
    if (context == null || context.isDestroyed()) return;

    //placeHolderUrl=R.drawable.ic_user;
    //errorImageUrl=R.drawable.ic_error;
        Glide.with(context) //passing context 
                .load(getFullUrl(url)) //passing your url to load image.
                .placeholder(placeHolderUrl) //this would be your default image (like default profile or logo etc). it would be loaded at initial time and it will replace with your loaded image once glide successfully load image using url.
                .error(errorImageUrl)//in case of any glide exception or not able to download then this image will be appear . if you won't mention this error() then nothing to worry placeHolder image would be remain as it is.
                .diskCacheStrategy(DiskCacheStrategy.ALL) //using to load into cache then second time it will load fast.
                .animate(R.anim.fade_in) // when image (url) will be loaded by glide then this face in animation help to replace url image in the place of placeHolder (default) image.
                .fitCenter()//this method help to fit image into center of your ImageView 
                .into(imageView); //pass imageView reference to appear the image.
}
0
Abdul Rizwan