2013-01-21 21 views
7

Stworzyłem galerię zdjęć i wszystko działa dobrze. Aby powiększać i przesuwać obraz jest wymaganepozycjonowanie obrazu macierzy w centrum obrazu

ImgView.setScaleType (ImageView.ScaleType.MATRIX) 

i kiedy to zrobić, obraz mam jest mała, więc zadzwoniłem metoda

scaleFactor = view.getWidth()/(float)view.getDrawable().getIntrinsicWidth(); 
matrix.setScale(scaleFactor, scaleFactor); 

więc nie przegap rozmiar obrazu, ale jak widać, obraz wznosi się ponad wszystko i musi pozostać na środku ekranu.

Próbowałem to

matrix.postTranslate((screen_width-image_width)/2, (screen_height-image_height)/2); 

ale nie działają.

Każdy pomysł? Przepraszam, że nie wstawiam zdjęć, ale nie mogę, ponieważ moja reputacja. Dziękuję bardzo z góry

+0

Czy próbowałeś określić punkt obrotu? 'matrix.setScale (scaleFactor, scaleFactor, view.getWidth()/2, view.getHeight()/2);' –

+0

tak, próbowałem, ale bez żadnych wyników. Obraz nadal nie jest w środku. Dziękuję za odpowiedź. – sergio

Odpowiedz

15

Ok, ja skorygować ten błąd, po prostu musiał umieścić następujące linie kodu:

RectF drawableRect = new RectF(0, 0, image_width, image_height); 
RectF viewRect = new RectF(0, 0, screen_width, screen_height); 
matrix.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER); 

Mam nadzieję, że ktoś pomaga, bardzo dziękuję za odpowiedzi.

4
@Override 
public void onWindowFocusChanged(boolean hasFocus) { 

    super.onWindowFocusChanged(hasFocus); 

    screenWidth = layout.getWidth(); 
    screenHeight = layout.getHeight(); 

    Log.e("", "Image Width : " + imageWidth + " > " + imageHeight); 
    Log.e("", "screen Width : " + screenWidth + " > " + screenHeight); 

    RectF drawableRect = new RectF(0, 0, imageWidth, imageHeight); 
    RectF viewRect = new RectF(0, 0, screenWidth, screenHeight); 
    matrix.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER); 
    img.setImageMatrix(matrix); 
} 
+0

'img.setImageMatrix (matrix)' było dla mnie kluczowe –