2016-04-18 5 views
6

Ich verwende die Glide image loading library und ich habe Probleme, wenn es um die Größenänderung von Bitmaps geht.Wie man Glide-Upscaling stoppt?

Wenn mit dem folgenden Code:

Glide.with(getActivity()) 
    .load(images.get(i)) 
    .asBitmap().centerCrop() 
    .into(new SimpleTarget<Bitmap>(1200, 1200) { 
     @Override 
     public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { 

     } 
    }); 

Jede einzelne Bitmap zu den angegebenen Abmessungen der Größe verändert wird. Also, wenn das Bild 400x300 ist, wird es upscaled bis zu 1200 x 1200 was ich nicht will. Wie stelle ich es so her, dass das Bild nicht verkleinert wird, wenn das Bild kleiner als die angegebenen Abmessungen ist?

Ich spezifiziere Dimensionen, weil ich möchte, dass jedes Bild, das größer als die angegebenen Dimensionen ist, in der Größe geändert wird, unter Berücksichtigung centerCrop; Wenn das Bild kleiner als die angegebenen Abmessungen ist, möchte ich nicht, dass es verkleinert wird.

+0

Das Bild Scaletype centerCrop wird Ihr Bild führt vom Zentrum zu erweitern, so dass jede Seite so groß oder größer ist als die Grenzen der Ansicht, in der sie angeordnet ist. Ich bin kein glide-Benutzer, aber ich nehme an, das centerCrop() nach asBitmap() zu entfernen - kann Ihnen helfen - Bearbeiten: Sie legen auch die Größe auf 1200x1200, also gehen Sie das irgendwie ändern zu müssen – Guardanis

+0

@Guardanis Ich habe das versucht, und es bewirkt, dass es alle angegebenen Dimensionen ignoriert. – Jack

+0

Warum geben Sie die Abmessungen an, wenn Sie nicht gedehnt werden möchten? Was versuchst du zu erreichen? – headsvk

Antwort

7

Ich möchte, dass jedes Bild, das größer als die angegebenen Abmessungen ist, wird, unter Berücksichtigung von centerCrop; und wenn das Bild kleiner als die angegebenen Dimensionen ist, möchte ich nicht, dass es in der Größe geändert wird.

Sie können dieses Verhalten mit einer Transformation benutzerdefinierten erhalten:

public class CustomCenterCrop extends CenterCrop { 

    public CustomCenterCrop(BitmapPool bitmapPool) { 
     super(bitmapPool); 
    } 

    public CustomCenterCrop(Context context) { 
     super(context); 
    } 

    @Override 
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { 
     if (toTransform.getHeight() > outHeight || toTransform.getWidth() > outWidth) { 
      return super.transform(pool, toTransform, outWidth, outHeight); 
     } else { 
      return toTransform; 
     } 
    } 
} 

und es dann wie folgt verwenden:

Glide.with(getActivity()) 
    .load(images.get(i)) 
    .asBitmap() 
    .transform(new CustomCenterCrop(getActivity())) 
    .into(new SimpleTarget<Bitmap>(1200, 1200) { 
     @Override 
     public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { 

     } 
    });