2015-05-22 7 views
10

Używam biblioteki PhotoView do wykonania powiększania AndroidImageView. Zoomowanie działa dobrze.PhotoViewAttacher usuwa obraz Wyświetlenie granicy i powiększenia

Jestem ustawienie obrazu z low-quality w ImageView a następnie uruchomić, aby pobrać nowy obraz z hight-quality która zastąpi low-quality obraz.

Jeśli użytkownik powiększa w low-quality obrazu - w high-quality obraz zastępuje istniejący obraz, a poziom zoom ściąga :(

Jak mogę zapisać poziom powiększenia po załadowaniu high-quality obraz

ja”? ve próbowano uzyskać zdjęcie Matrix z PhotoViewAttacher w low-quality i ustawić je na high-quality image, ale to nie działa - poziom powiększenia obrazu i granice nie są takie same jak wcześniej. Obraz high-quality zastąpił obraz low-quality w ImageView .

Matrix matrix; 
    imageView.setImageBitmap(imageBitmap); 
    ... 

    PhotoViewAttacher mAttacher = new PhotoViewAttacher(imageView); 
    // save the matrix before any modifications 
    matrix = mAttacher.getDisplayMatrix(); 
    mAttacher.setOnMatrixChangeListener(new OnMatrixChangedListener() { 
     @Override 
     public void onMatrixChanged(RectF rect) { 
      // update the matrix 
      matrix = mAttacher.getDisplayMatrix(); 
     } 
    }); 

    imageProvider.load(getActivity(), imageView, imageUrl, progressBarView, imageConfig, new ImageCallback() { 
     @Override 
     public void onSuccess(ImageView imageView) { 
      // update image in ImageView 
      // probably the problem is in this .update() call 
      // but I don't get what's the exact problem 
      mAttacher.update(); 
      // restore high-quality image matrix 
      mAttacher.setDisplayMatrix(matrix); 
     } 

     @Override 
     public void onError(ImageView imageView) { 

     } 
    }); 

Edit: Obrazy mają różne wymiary.

+0

Nigdy nie korzystałem z tej biblioteki, ale w celu obejścia problemu można nazywać 'mAttacher.setZoomable (false)', aby wyłączyć funkcje powiększania podczas wyświetlania obrazu niskiej jakości, a następnie włączyć go po uzyskaniu wysokiej jakości obrazu jest pokazane. – woot

+0

to dobre rozwiązanie i będzie działać. Ale muszę udostępnić użytkownikowi funkcje powiększania, jest to wymóg :( –

Odpowiedz

0

Po zapoznaniu się z kodeksem PhotoViewAttacher.java - wydaje się, że dzwoni update() robi dwie rzeczy:

  1. zapewnienia typ skali dla ImageView jest ustawiony na ScaleType.MATRIX.
  2. Unieważnij bieżącą macierz i przelicz ją zgodnie z wymiarami nowego Drawable.

Zakładając, że Twoje pierwsze i drugie zdjęcie mają dokładnie te same wymiary, możesz po prostu pominąć wywołanie update(), które powinno zachować bieżące wartości powiększenia i panoramy.

+0

Obrazy mają różne wymiary :(tak, 'update()' to musi.Muszę przekształcić w jakiś sposób niskiej jakości matrycę obrazu w wysokiej jakości matrycę obrazu i zapisać proporcje. –

Powiązane problemy