web-dev-qa-db-fra.com

Taille de l'espace réservé Android Glide

J'ai un problème avec Android Glide. J'essaie d'échanger rapidement mon image, elles deviennent simplement de la taille de l'espace réservé, et mon image est de très petite taille. Alors qu'est-ce que je dois faire? 

J'ai peut-être besoin de vérifier si c'est chargé ou quelque chose du genre, mais je ne sais pas comment.

Glide.with(this)
    .load(quest.get(id).getImage())
    .placeholder(R.drawable.load)
    .fitCenter()
    .crossFade()
    .into(imageView);
11
TavoTevas

Selon this issue sur la page Glide GitHub, vous pouvez résoudre ce problème en ajoutant la ligne suivante à votre demande de Glide:

  .dontAnimate()

Cela ferait votre ligne de charge complète:

  Glide.with(context)
            .load("http://lorempixel.com/150/150")
            .placeholder(R.drawable.no_image)
            .override(100, 100)
            .dontAnimate()
            .into(imageView);
15
Ashkan Ghodrat

Ce que j'ai fait à cet égard a été d'utiliser override () pour imposer la taille de l'image. Si vous avez une vue en grille et que vous devez avoir deux images dans chaque ligne, voici comment trouver la taille de l'écran en pixels pour calculer la largeur et la hauteur correctes de l'image:

    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    placeholderWidth = size.x / 2 ;
    placeholderHeight = size.x * 3 / 2 ; // based on the image's height to width ratio

Une fois la largeur et la hauteur souhaitées pour chaque image, il est facile d’utiliser le remplacement:

    Glide.with(context)
            .load(url)
            .placeholder(R.drawable.loading)
            .override(placeholderWidth,placeholderHeight)                
            .into(viewHolder.imageViewHolder);
1
Shaahin Sh

Je le fais comme mentionné ci-dessous: 

L'idée est de définir le type de balance sur tel que requis par le remplaçant et d'attacher un écouteur pour modifier le type de balance à la demande de l'image téléchargée après le téléchargement de l'image.

//ivBuilderLogo = Target ImageView
//Set the scale type to as required by your place holder
//ScaleType.CENTER_INSIDE will maintain aspect ration and fit the placeholder inside the image view
holder.ivBuilderLogo.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 

//AnimationDrawable is required when you are using transition drawables
//You can directly send resource id to glide if your placeholder is static
//However if you are using GIFs, it is better to create a transition drawable in xml 
//& use it as shown in this example
AnimationDrawable animationDrawable;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop)
     animationDrawable=(AnimationDrawable)context.getDrawable(R.drawable.anim_image_placeholder);
else
     animationDrawable=(AnimationDrawable)context.getResources().getDrawable(R.drawable.anim_image_placeholder);
animationDrawable.start();

Glide.with(context).load(logo_url)
                   .placeholder(animationDrawable)
                   .listener(new RequestListener<String, GlideDrawable>() {
                        @Override
                        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource)
                        {
                           return false;
                        }

                        //This is invoked when your image is downloaded and is ready 
                        //to be loaded to the image view
                        @Override
                        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource)
                        {   
                        //This is used to remove the placeholder image from your ImageView 
                        //and load the downloaded image with desired scale-type(FIT_XY in this case)
                        //Changing the scale type from 'CENTER_INSIDE' to 'FIT_XY' 
                        //will stretch the placeholder for a (very) short duration,
                        //till the downloaded image is loaded
                        //setImageResource(0) removes the placeholder from the image-view 
                        //before setting the scale type to FIT_XY and ensures that the UX 
                        //is not spoiled, even for a (very) short duration
                            holder.ivBuilderLogo.setImageResource(0);
                            holder.ivBuilderLogo.setScaleType(ImageView.ScaleType.FIT_XY);
                            return false;
                        }
                    })
                    .into( holder.ivBuilderLogo);

Ma transition est dessinable (R.drawable.anim_image_placeholder):

(non requis si vous utilisez une image statique)

<?xml version="1.0" encoding="utf-8"?>
<animation-list
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:oneshot="false">
    <item Android:drawable="@drawable/loading_frame1" Android:duration="100" />
    <!--<item Android:drawable="@drawable/loading_frame2" Android:duration="100" />-->
    <item Android:drawable="@drawable/loading_frame3" Android:duration="100" />
    <!--<item Android:drawable="@drawable/loading_frame4" Android:duration="100" />-->
    <item Android:drawable="@drawable/loading_frame5" Android:duration="100" />
    <!--<item Android:drawable="@drawable/loading_frame6" Android:duration="100" />-->
    <item Android:drawable="@drawable/loading_frame7" Android:duration="100" />
    <!--<item Android:drawable="@drawable/loading_frame8" Android:duration="100" />-->
    <item Android:drawable="@drawable/loading_frame9" Android:duration="100" />
    <!--<item Android:drawable="@drawable/loading_frame10" Android:duration="100" />-->
</animation-list>
1
Swas_99

Si je comprends bien votre problème, vous devez charger des images, mais leur largeur et leur hauteur doivent être supérieures à celles de l'image de marque de réservation. Pour résoudre votre problème, vous devez tout d'abord lire la documentation de Glide. Je peux Vous ne voyez pas votre définition ImageView dans le fichier XML, mais je pense que vous utilisez l'attribut wrap_content pour width et height. Si j'ai raison, il y a un goulet d'étranglement. Avant le début du chargement de l'image, Glide obtient la largeur et la hauteur exactes de ImageView. Après cela, il charge l'image du réseau et le redimensionne en même temps en fonction de l'un des attributs de ImageView (largeur ou hauteur). C'est pourquoi vous obtenez des petites images après le chargement. À résoudre votre problème ne fait que définir la largeur ou la hauteur de ImageView avec la valeur que vous vous attendez à voir. L’autre côté de l’image sera automatiquement calculé par la logique Glide.

0
Alex Sarapin