2015-11-14 13 views
7

Vorrei utilizzare Glide per caricare bitmap su ImageView dopo il ritaglio e il ridimensionamento di una bitmap.Usa glide per caricare bitmap su ImageView

Non voglio usare ImageView.setImageBitmap(bitmap); perché sto caricando molte immagini e potrebbe occupare un po 'di memoria, anche se le immagini sono di piccole dimensioni, ho solo bisogno di usare Glide perché so che ottimizza il caching delle immagini.

Ho letto this post, ma non ho capito bene la sua soluzione quando ho provato a implementarlo. Quindi forse qualcuno ha una soluzione più pulita e più facilmente comprensibile.

Questo è il mio codice che preleva un'immagine e ne crea una bitmap.

Ho bisogno di usare la glide invece di ImageView.setImageBitmap(bitmap);.

new AsyncTask<String, Void, Void>() { 
    Bitmap theBitmap = null; 
    Bitmap bm = null; 

    @Override 
    protected Void doInBackground(String... params) { 
     String TAG = "Error Message: "; 
     try { 
      //Load the image into bitmap 
      theBitmap = Glide. 
        with(mContext). 
        load("http://example.com/imageurl"). 
        asBitmap(). 
        into(-1, -1). 
        get(); 

      //resizes the image to a smaller dimension out of the main image. 
      bm = Bitmap.createBitmap(theBitmap, 0, 0, 210, 80); 
     } catch (final ExecutionException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (final InterruptedException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (final NullPointerException e) { 
      // 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void dummy) { 
     if (null != theBitmap) { 
      //Set image to imageview. 
      **// I would like to Use Glide to set the image view here Instead of .setImageBitmap function** 
      holder.mImageView.setImageBitmap(bm); 

      holder.mImageView.setAdjustViewBounds(true); 
      holder.mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     } 
    } 
}.execute(); 
+0

Puoi dirmi qual è il tuo problema? Bitmap è nullo o il tuo 'ImageView' mostra il quadrato bianco? –

+0

No, bitmap non è nullo, Devo usare Glide per impostare l'immagine Bitmap in ImageView invece di impostarla direttamente. –

+0

Il motivo è perché sto caricando molte immagini, che richiedono memoria nella cache. Capisci cosa intendo? –

risposta

18

Non è necessario AsyncTask caricare un'immagine con Glide. Glide carica asynchronys di immagine. Prova ad usare questo codice:

Glide.with(mContext) 
       .load("http://example.com/imageurl") 
       .asBitmap() 
       .into(new SimpleTarget<Bitmap>() { 
        @Override 
        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
         // you can do something with loaded bitmap here 

         // ..... 

         holder.mImageView.setImageBitmap(resource); 
        } 
       }); 
+0

No, voglio ritagliare l'immagine in TOP, non centerCrop, è per questo che ho scelto di creare una bitmap e poi darla (0, 0, 210, 80) in modo che ridimensionasse a quella dimensione e iniziasse dalla cima invece del centro. –

+0

Ho modificato la mia risposta, per favore controlla questo. p.s. Stai utilizzando i valori delle costanti (ad esempio 210,80) per avviare Bitmap in alto? Penso che sia una cattiva pratica e dovresti usare il 'Drawable 'personalizzato con il top aligment. –

+0

Grazie, ma questo non ha funzionato neanche, Quando crei la tua bitmap dentro onResourceReady, fa ancora la stessa cosa di quando è all'esterno diResourceReady. Nessun cambiamento! –

Problemi correlati