За допомогою Picasso змініть розмір зображення на повну ширину та фіксовану висоту


164

У мене є вертикальний LinearLayout, де один із елементів ImageViewзавантажується за допомогою Picasso. Мені потрібно збільшити ширину зображення на повну ширину пристрою і відобразити центральну частину зображення, обрізану на фіксовану висоту (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. Він повинен змінюватися відповідно до висоти зображення.
Четне

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()в обох випадках.
Нішант Бхакта

як змінити його розмір, не обрізаючи його з будь-якої сторони, а також зберегти аспект
Rohit Sharma

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.