Изменить размер изображения до полной ширины и фиксированной высоты с помощью Picasso


164

У меня есть вертикальная LinearLayout, где один из элементов ImageViewзагружается с помощью Пикассо. Мне нужно увеличить ширину изображения до полной ширины устройства и отобразить центральную часть изображения, обрезанную на фиксированную высоту (150 точек на дюйм). В настоящее время у меня есть следующий код:

Picasso.with(getActivity()) 
    .load(imageUrl) 
    .placeholder(R.drawable.placeholder) 
    .error(R.drawable.error) 
    .resize(screenWidth, imageHeight)
    .centerInside() 
    .into(imageView);

Какие значения я должен ввести screenWidthи imageHeight(= 150dp)?

Ответы:


486

Ты ищешь:

.fit().centerCrop()

Что это значит:

  • fit - ждать, пока ImageView размер не будет измерен, и измените размер изображения, чтобы оно точно соответствовало его размеру.
  • centerCrop- масштабируйте изображение с учетом соотношения сторон, пока оно не заполнит размер. Обрежьте верхнюю и нижнюю часть, либо левую и правую, чтобы он точно соответствовал размеру.

5
Какой должна быть высота imageView? Я не хочу фиксированной высоты для моего imageView. Это должно измениться согласно высоте изображения.
Chetna

4
.fit().centerInside()работал для меня, где просто использование .centerInside()было сбой с Center inside requires calling resize with positive width and height.сообщением об ошибке.
Рок Ли

@Rock Lee, вам нужно изменить его размер: '.load (url) .resize (targetWidth, targetHeight)' .........
FRK

8
.fit().centerCrop()или .fit().centerInside()не работает. Изображение не загружается в imageView. без .fit()изображения загружается нормально. Я не пользуюсь.resize() в обоих случаях.
Нишант Бхакта

как изменить его размер, не обрезая его с какой-либо стороны, а также сохранив аспект
Рохит Шарма

1

В некоторых случаях функция fit () бесполезна. Прежде чем ждать окончания измерения ширины и высоты. Таким образом, вы можете использовать globallayoutlistener. например;

imageView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                Picasso.with(getActivity())
                        .load(imageUrl)
                        .placeholder(R.drawable.placeholder)
                        .error(R.drawable.error)
                        .resize(screenWidth, imageHeight)
                        .fit
                        .centerInside()
                        .into(imageView);
                imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.