Android picasso масштабирует фотографии, чтобы они были больше или соответствовали изображению (без пробелов)

У меня серьезная проблема с масштабированием библиотеки Picasso. Проблема в том, что у меня есть макет, состоящий из 3 основных видов и некоторых кнопок. Просмотры такие:

ImageView 50% mapView 20% EditTextView 30%

И я хочу загрузить изображения неизвестного разрешения в этот imageView, не оставляя пробелов. Я пытался использовать .fit().centerInside, но это просто оставило пробелы по бокам. Вот как выглядит мой макет:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_below="@+id/photo1"
        android:weightSum="10">

        <ImageView
        android:id="@+id/photo1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5"
        android:background="#75aea7ab" />

        <com.google.android.gms.maps.MapView
            android:id="@+id/map2"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="2" />

        <EditText
            android:id="@+id/edittext"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_marginBottom="15dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="15dp"
            android:layout_weight="3"
            android:background="#00000000"
            android:gravity="top|left"
            android:inputType="textMultiLine"
            android:textColor="#ff000000"
            android:textSize="15sp" />
    </LinearLayout>
<ImageButton
    android:id="@+id/post"
    android:layout_width="@dimen/fab_button_diameter"
    android:layout_height="@dimen/fab_button_diameter"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_gravity="end"
    android:layout_marginBottom="300dp"
    android:background="@drawable/fab_shape"
    android:src="@drawable/forward"
    android:text="Post!"
    android:tint="@android:color/white" />

<Button
    android:id="@+id/camera"
    android:layout_width="72dp"
    android:layout_height="72dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="75dp"
    android:layout_marginTop="100dp"
    android:background="@drawable/camera" />

<Button
    android:id="@+id/gallery"
    android:layout_width="72dp"
    android:layout_height="72dp"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="75dp"
    android:layout_marginTop="100dp"
    android:background="@drawable/gallery" />


person Lukas Anda    schedule 05.07.2015    source источник
comment
Итак, у вас есть фиксированный размер ImageView, но изображения переменного размера, и вы хотите заполнить весь ImageView. В этом случае fit().centerCrop() кажется выходом. Конечно, он обрежет ваши изображения, но если соотношение сторон изображения не соответствует соотношению сторон ImageView, у вас есть только два варианта: (1) уместить - с белыми полосами или (2) обрезать - с некоторыми частями изображения. изображение потеряно.   -  person david.mihola    schedule 05.07.2015
comment
Эй, спасибо за ваш комментарий. Я боялся этого ответа. Итак, есть ли другой способ добиться этого без обрезки?   -  person Lukas Anda    schedule 05.07.2015
comment
Я не уверен, что понимаю... Вы хотите растянуть изображение, чтобы оно соответствовало ImageView? Или вы хотите изменить размер ImageView, чтобы он соответствовал изображению, даже если это сломает/изменит весь ваш макет. Что касается последнего, см. disqus.com/home/discussion/jpardogo/resize_and_respect, включая мои комментарии к сообщению в блоге. Первое, вероятно, возможно с Transformation, но мне придется попробовать и/или погуглить самому...   -  person david.mihola    schedule 05.07.2015


Ответы (1)


Вы пытались установить ScaleType после загрузки изображения?

   mPicasso.load("yourUrl")
                    .into(yourImageView, new Callback() {
                        @Override
                        public void onSuccess() {
                            yourImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);//Or ScaleType.FIT_CENTER
                        }
                        @Override
                        public void onError() {
                            //nothing for now
                        }
                    });
person Joel    schedule 05.07.2015
comment
Эй, это хорошая идея, моя проблема в том, что я загружаюсь в цель, чтобы извлечь растровое изображение из изображения. - person Lukas Anda; 05.07.2015
comment
Я помещаю его в цель, и это работает очень хорошо. Спасибо чувак :) - person Lukas Anda; 05.07.2015
comment
Подождите, чем это отличается от fit().centerCrop() или fit().centerInside() соответственно? - person david.mihola; 05.07.2015
comment
Сначала функция fit() Пикассо уменьшит изображение и отцентрирует представление изображения, но не будет выполнять масштабирование, а затем centerCrop будет равномерно масштабировать изображение (сохранять соотношение сторон изображения), так что оба размера (ширина и высота) изображения будут равны или больше, чем соответствующий размер представления (минус заполнение), но вам все равно нужно (в случае Пикассо) указать ширину и высоту для этого нового растрового изображения, fit().centerInside() сделает то же самое, но когда centerInside вызывается следует равномерно масштабировать изображение (сохранять соотношение сторон изображения). - person Joel; 06.07.2015
comment
Это хороший вопрос, но fit().centerCrop() или fit().centerInside() у меня не работают, но это работает. А также я не могу использовать эти методы, потому что мне нужно поместить их в Target, а не напрямую в ImageView, потому что я хочу получить ссылку на растровое изображение. - person Lukas Anda; 06.07.2015