2015-08-18 20 views
9

Ho un problema con Android Glide. Sto cercando di scambiare rapidamente la mia immagine, diventano semplicemente tutte le dimensioni dei segnaposto e l'immagine del mio segnaposto è di dimensioni molto ridotte. Quindi cosa devo fare?Dimensioni segnaposto Android Glide

Forse ho bisogno di controllare se è caricato o qualcosa del genere, ma non so come.

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

risposta

0

Se ho capito bene il problema, è necessario caricare le immagini, ma devono avere larghezza e l'altezza più grande l'immagine segnaposto rispetto. Per risolvere il tuo problema devi prima leggere la documentazione di Glide. Non riesco a vedere la definizione di ImageView nel file xml, ma penso che si usi l'attributo wrap_content per larghezza e altezza. Se ho ragione, c'è il collo di bottiglia. Prima di iniziare il caricamento dell'immagine, Glide ottiene la larghezza e l'altezza esatte di ImageView. Dopo di ciò carica l'immagine dalla rete e allo stesso tempo la ridimensiona in base a uno degli attributi ImageView (larghezza o altezza). Ecco perché si ottengono piccole immagini dopo il caricamento. Per risolvere il problema, imposta semplicemente la larghezza o l'altezza del valore di ImageView che ti aspetti di vedere. L'altro lato dell'immagine verrà calcolato automaticamente dalla logica Glide.

12

Secondo this questione a pagina Glide GitHub è possibile risolvere il problema con l'aggiunta seguente riga alla vostra richiesta di Glide:

.dontAnimate() 

che renderebbe la vostra linea di pieno carico:

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

Come quel link menziona anche, .don'tAnimate() può anche essere sostituito con .animate (android.R.anim.fade_in) – Chris

+0

Impressionante! Ha funzionato. – Chandru

1

Quello che ho a questo proposito è stato utilizzato override() per rafforzare la dimensione dell'immagine. Se si dispone di una GridView e avete bisogno di avere due immagini in ogni fila, questo è il modo a trovare la dimensione dello schermo in pixel per calcolare la larghezza corretta e l'altezza dell'immagine:

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 

Una volta che la larghezza e l'altezza desiderata per ogni immagine è a mano, è facile da usare sostituzione:

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

lo faccio come indicato di seguito:

l'idea è quella di impostare il tipo di scala come richiesto dal titolare posto inizialmente & allegare ascoltatore per cambiare il tipo di scala agai n come richiesto dall'immagine scaricata dopo che l'immagine è stata scaricata.

//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); 

mio transizione disegnabile (R.drawable.anim_image_placeholder):

(non richiesto se si utilizza un'immagine statica)

<?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> 
Problemi correlati