2016-04-18 23 views
6

Używam Glide image loading library i mam problemy, jeśli chodzi o zmianę rozmiaru bitmap.Jak zatrzymać skalowanie w górę?

Przy użyciu następującego kodu:

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

     } 
    }); 

Każda mapa bitowa zostanie zmieniona na określonych wymiarach. Tak więc, jeśli obraz ma wymiary 400 x 300, zostanie powiększony do rozmiaru 1200 x 1200, którego nie chcę. Jak mogę to zrobić, aby obraz był mniejszy niż określone wymiary, nie zmieni jego rozmiaru?

Podaję wymiary, ponieważ chcę, aby każdy rozmiar większy niż podany rozmiar został zmieniony, biorąc pod uwagę centerCrop; a jeśli obraz jest mniejszy niż określone wymiary, nie chcę, aby był on zmieniany.

+0

obrazu ScaleType centerCrop spowoduje swój obrazek, aby poszerzyć od centrum tak że każda strona jest tak duża lub większa niż granice widoku, w którym jest ułożony. Nie jestem użytkownikiem przesuwającym się, ale przypuszczam, że usunę tę centerCrop() po asBitmap() - pomogę ci - Edytuj: ustawiasz także rozmiar na 1200 x 1200, więc idziesz trzeba to zmienić, jakoś tak – Guardanis

+0

@Guardanis Próbowałem tego, i to powoduje, że po prostu całkowicie ignoruje wszelkie podane wymiary. – Jack

+0

dlaczego określasz wymiary, gdy nie chcesz, aby je rozciągać? Co próbujesz osiągnąć? – headsvk

Odpowiedz

7

Chcę, aby każdy obraz, który jest większy niż podane wymiary, został zmieniony przy uwzględnieniu centerCrop; a następnie, jeśli obraz jest mniejszy niż określone wymiary, nie chcę, aby był on zmieniany.

można uzyskać to zachowanie z transformacją niestandardowe:

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; 
     } 
    } 
} 

a następnie używać go tak:

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) { 

     } 
    });