2016-03-29 26 views
2

Ich verwende Glide, um Bilder auf Scale ImageView zu laden - es ist eine benutzerdefinierte Ansicht mit Schwenk-und Zoom-Gesten. Ich sollte Bitmap Objekt an diese benutzerdefinierte Ansicht übergeben, um Bild festzulegen.Android Glide: Wie Bitmap in bestimmter Größe herunterladen?

private SimpleTarget target = new SimpleTarget<Bitmap>() { 
    @Override 
    public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) { 
     scaleImageView.setImage(ImageSource.bitmap(bitmap)); 
    } 
}; 

private void loadImageSimpleTarget() { 
    Glide 
     .with(context) 
     .load(url) 
     .asBitmap() 
     .into(target); 
} 

Dieser Code-Schnipsel funktioniert gut, aber ich werde Gross Bitmap erhalten, die zu OutOfMemoryErrors führen kann:

So kann ich Glide .asBitmap() mit SimpleTarget verwenden. Auch könnte ich gewünschte Bitmap-Größe auf Konstruktor wie folgt angeben: ...new SimpleTarget<Bitmap>(250, 250)..., aber ich würde Dimensionen manuell berechnen müssen.

Gibt es eine Möglichkeit, die Ansicht (Instanz von CustomView) an Glides Anfrage zu übergeben, so dass Dimensionen automatisch berechnet werden und Bitmap-Objekte als Ergebnis erhalten?

+0

Sie die Dimensionen von Custom benutzen? – leonziyo

+0

@leonziyo Ja, ich möchte Bilder in der Größe von CustomView laden. Ich benutze es mit 'match_parent', also wird es bestimmte Dimensionen haben. – Ruslan

+0

Warum übergeben Sie die Dimension nicht an 'SimpleTarget's Konstruktor. So: 'new SimpleTarget (customView.getWidth(), customView.getHeight())' ... – leonziyo

Antwort

1

Fortsetzung der Diskussion aus den Kommentaren, erhalten Sie 0 für die Breite und Höhe beim Aufruf von onCreateView. Sie können jedoch einen Listener benachrichtigt werden, wenn die Grenzen der Ansicht tatsächlich berechnet werden, und dann können Sie die echte Breite und Höhe erhalten, indem getWidth oder getHeight Aufruf:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    // ... 
    // your other stuff 
    // ... 

    // set listener 
    customView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Log.d("debug", "width after = " + customView.getHeight()); 

      // pass the width and height now that it is available 
      target = new SimpleTarget<Bitmap>(customView.getWidth(), customView.getHeight()) { 
       @Override 
       public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) { 
        scaleImageView.setImage(ImageSource.bitmap(bitmap)); 
       } 
      }; 

      // remove listener, we don't need to be notified again. 
      customView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     } 
    }); 
} 
+0

Danke, es hat funktioniert! – Ruslan