PhotoView - сохранить масштаб и координаты XY - PullRequest
0 голосов
/ 01 июня 2018

Я использую PhotoView Пикассо в моем приложении для Android.Я хочу переключить два изображения, нажав кнопку, сохраняя масштаб и координаты XY.Я могу сохранить масштаб, но трудно сохранить координаты XY, потому что два изображения имеют разное разрешение, и я должен сохранить относительные координаты XY ПОСЛЕ масштаб.Когда я переключаюсь на новое изображение, если я не сохраняю координаты xy, увеличенное изображение всегда находится в центре.Ниже мой текущий код, который реализует только сохранение масштаба.

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {

    // ... some basic stuffs here

    mRequestCreator1 = Picasso.get().load(mImageUri1);
    mRequestCreator2 = Picasso.get().load(mImageUri2);
    mRequestCreator1.into(mPhotoView);

    mBtnSwitch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final float prevScale = mPhotoView.getScale();
            // MUST use the callback because of timing issue.
            Callback callback = new Callback() {
                @Override
                public void onSuccess() { mPhotoView.setScale(prevScale); }

                @Override
                public void onError(Exception e) { e.printStackTrace(); }
            };

            if(sPrevIsOriginal) {
                mRequestCreator2.into(mPhotoView, callback);
            } else {
                mRequestCreator1.into(mPhotoView, callback);
            }
            sPrevIsOriginal = !sPrevIsOriginal;
        }
    });
}

1 Ответ

0 голосов
/ 14 июня 2018

После множества проб и ошибок я узнал, как это сделать.Вы должны получить дополнительную матрицу предыдущего изображения с помощью getSuppMatrix(), а затем применить эту дополнительную матрицу к новому изображению с помощью setSuppMatrix().Важно использовать дополнительную матрицу.НИКОГДА не пытайтесь делать это, манипулируя getImageMatrix() или getDisplayMatrix(), потому что он либо не будет работать, либо код станет намного сложнее.

...