Библиотека Picasso и PhotoView странно загружает изображение в ImageView

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

Но когда picasso загружает изображение в первый раз, он отображает изображения следующим образом:

введите здесь описание изображения

Но как только я касаюсь изображения, оно размещается правильно

введите здесь описание изображения

Но если я закрою свое приложение, оно внезапно перестанет показывать изображение и не будет.

Моя основная активность: http://pastebin.com/5H4zAgH

Библиотеки, которые я использую:


person dasmikko    schedule 13.02.2014    source источник


Ответы (2)


У меня была такая же проблема с неуместным изображением при совместном использовании Picasso и Photoview.

Чтобы решить эту проблему, я использую обратный вызов при загрузке изображения с Пикассо, используя into(view, callback) вместо into(view). После успешной загрузки изображения я создаю экземпляр объекта PhotoViewAttacher или вызываю метод update().

Вот вам пример кода:

Callback imageLoadedCallback = new Callback() {

    @Override
    public void onSuccess() {
        if(mAttacher!=null){
            mAttacher.update();
        }else{
            mAttacher = new PhotoViewAttacher(mImageView);
        }
    }

    @Override
    public void onError() {
        // TODO Auto-generated method stub

    }
};

Picasso.with(mContext)
.load(mImageUrl)
.into(mImageView,imageLoadedCallback);

Надеюсь, это поможет. С уважением.

person Carlosph    schedule 20.02.2014
comment
Именно то, что я искал! - person dasmikko; 21.02.2014
comment
Кажется, это работает лучше, если я каждый раз воссоздаю аттачмен, а не обновляю его. - person Aron Lorincz; 01.08.2014
comment
что, если я хочу использовать viewpager? - person randy; 19.01.2017

У меня тоже была такая же проблема. Я решил это, используя PhotoView вместо ImageView и удалил PhotoViewAttacher из своего кода.

В файле макета (если вы используете макет):

<uk.co.senab.photoview.PhotoView
    android:id="@+id/your_photo_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ... />

И в вашем коде:

PhotoView photoView = (PhotoView) findViewById(R.id.your_photo_view);
Picasso.with(context)
        .load(file)
        ...
        .into(photoView);

Теперь все должно быть правильно (по крайней мере у меня так!);

person Mohamad Amin    schedule 27.06.2015
comment
Спасибо! Гораздо чище, чем решение обратного вызова! - person Keysersoze; 28.09.2016
comment
какая последняя версия для этого? - person Bunny; 23.11.2016