2016-04-18 2 views
6

Я использую Glide image loading library, и у меня возникают проблемы при изменении размеров растровых изображений.Как остановить масштабирование Glide?

При использовании следующего кода:

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

     } 
    }); 

Каждых растровое получает уменьшенный до заданных размеров. Итак, если изображение составляет 400x300, оно становится масштабированным до 1200 x 1200, которое я не хочу. Как сделать так, чтобы, если изображение меньше заданных размеров, оно не изменит его размер?

Я определяю размеры, потому что я хочу, чтобы каждое изображение, размер которого превышал указанные размеры, был изменен с учетом centerCrop; а затем, если изображение меньше заданных размеров, я не хочу, чтобы оно изменялось.

+0

Образ ScaleType centerCrop заставит ваше изображение расширяться от центра так что каждая сторона будет такой же большой или больше, чем границы Представления, в которые она выложена. Я не являюсь пользователем сглаживания, но я бы предположил, что удаляю этот centerCrop() после asBitmap() -might-help - Изменить: вы также устанавливаете размер 1200x1200, так что вы собираетесь нужно как-то изменить это – Guardanis

+0

@Guardanis Я пробовал это, и он заставляет его просто полностью игнорировать любые измеренные параметры. – Jack

+0

Почему вы указываете размеры, когда вы не хотите, чтобы их растягивали? чего вы пытаетесь достичь? – headsvk

ответ

7

Я хочу, чтобы каждое изображение, размер которого больше, чем указанные размеры, был с измененным размером с учетом centerCrop; а затем, если изображение меньше заданных размеров, я не хочу, чтобы он был изменен.

Вы можете получить это поведение с помощью пользовательского преобразования:

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

, а затем использовать его как это:

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

     } 
    }); 
Смежные вопросы