9

Я хотел бы сохранить соотношение сторон изображения и изменить его размер, чтобы заполнить/поместить как можно больше, не искажая/изменяя его соотношение сторон, используя Picasso.Picasso не сохраняет соотношение сторон при изменении размера изображения

До сих пор я нашел это:

scaling image size in Picasso

, который предлагает использовать:

.fit().centerInside() 

однако когда я попробовал:

 Picasso.with(this).load(boxart) 
.fit().centerInside() 
     .into(imageItem); 

Вместе с моим XML:

... 



    <RelativeLayout 
     android:id="@+id/rl_ListView1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_centerInParent="true" 
     android:layout_gravity="left" 
     android:layout_weight="0.3" > 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:scaleType="fitXY" 
      android:layout_gravity="left" 

      /> 
    </RelativeLayout> 



    ... 

Однако изображение все еще выглядит искаженным (оно кажется слишком длинным и тощим - это оригинальное соотношение сторон искажено), и я не уверен, почему.

enter image description here

+0

код [Javadoc для 'запрессовки()'] (https://square.github.io/picasso/javadoc/com/squareup/picasso/RequestCreator.html#fit--) говорит, что он будет " изменить размер изображения, чтобы он точно соответствовал целевому ImageView ", т.е. игнорировать соотношение сторон. –

+0

Да, но 'centerInside()' должен исправить это, i. е. измените размер изображения так, чтобы он находился внутри «ImageView», сохраняя соотношение сторон. Я подозреваю, что проблема 'android: scaleType: fitXY' является проблемой. –

+0

Это было действительно полезно ... изображение больше не искажено и поддерживает его соотношение сторон - однако оно не изменяет размер/заполняется правильно (вокруг него пустое пространство) http://i.stack.imgur.com/ ZpCZ3.jpg http://pastebin.com/UXbuU3vv –

ответ

7

Код ниже должен работать:

.fit().centerCrop() 
1

CenterInside CenterInside() представляет собой метод обрезки, что масштабирует изображение таким образом, что оба измерения равны или меньше, чем запрошенные пределы ImageView , Изображение будет отображаться полностью, но может не заполнить весь ImageView.

Picasso 
.with(context) 
.load(UsageExampleListViewAdapter.eatFoodyImages[0]) 
.resize(600, 200) 
.centerInside() 
.into(imageViewResizeCenterInside); 
Смежные вопросы