Android Glide placeholder size

后端 未结 4 679
醉话见心
醉话见心 2021-01-07 23:25

I have a problem with Android Glide. I am trying to quickly swap my image, they just become all placeholder size, and my placeholder image is very low size. So what I need t

4条回答
  •  清歌不尽
    2021-01-08 00:03

    I do it like mentioned below:

    The idea is to set the scale type to as required by the place holder initially & attach listener to change the scale type again to as required by the downloaded image after the image is downloaded.

    //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() {
                            @Override
                            public boolean onException(Exception e, String model, Target 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 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);
    

    My transition drawable (R.drawable.anim_image_placeholder) :

    (not required if using a static image)

    
    
        
        
        
        
        
        
        
        
        
        
    
    

提交回复
热议问题