2013-09-10 30 views
0

當縮放圖像視圖時,允許圖像在縮放縮放時變得小於最小大小,然後在onScaleEnd方法中恢復到最小大小。然而我遇到了一個問題:縮放時造成不同結果的相同矩陣ImageView

構造函數中的語句transformMatrix = new Matrix()transformMatrix = child.getImageMatrix()之間沒有區別 - 我已檢查並且兩個賦值都將返回矩陣:[1,0,0] [0,1, 0] [0,0,1] ...但由於某種原因他們不工作相同

這裏就是形象得到縮放:

public boolean onScale(ScaleGestureDetector detector) { 
     //update the current scale 
     float oldScaleFactor = scaleFactor; 
     scaleFactor *= detector.getScaleFactor(); 


     if(Math.abs(oldScaleFactor - scaleFactor) < 0.02 * scaleFactor){ 
      // don't update scale Factor if the event isn't being handled 
      scaleFactor = oldScaleFactor; 
      return false; 
      // should prevent against changes from resting fingers in place 
     } 
     else{  
      float xDiff = initialFocalPoints[0] - currentFocalPoints[0]; 
      float yDiff = initialFocalPoints[1] - currentFocalPoints[1]; 

      transformMatrix.setScale(scaleFactor, scaleFactor, 
           currentFocalPoints[0], currentFocalPoints[1]); 
      transformMatrix.postTranslate(xDiff, yDiff); 

      child.setImageMatrix(transformMatrix); 
      return true; 
     } 
    } 

這裏是我調整到正確的最低:

@Override 
public void onScaleEnd(ScaleGestureDetector detector){ 
     //making sure the zoom level is within the allowable bounds 
     if(scaleFactor < ZOOM_LEVEL_5 || scaleFactor > 8.0f){ 
     scaleFactor = Math.max(ZOOM_LEVEL_5, Math.min(scaleFactor, 8.0f)); 
     float xDiff = initialFocalPoints[0] - currentFocalPoints[0]; 
     float yDiff = initialFocalPoints[1] - currentFocalPoints[1]; 

     transformMatrix.setScale(scaleFactor, scaleFactor, 
          currentFocalPoints[0], currentFocalPoints[1]); 
     transformMatrix.postTranslate(xDiff, yDiff); 


     child.setImageMatrix(transformMatrix); 
    } 
} 

一切工作正常,當我在構造函數中設置transformMatrix = new Matrix(),但是這並未不適用於transformMatrix = child.getImageMatrix() - 影像劑量不會回彈到正確的最小尺寸......發生了什麼事?

幫助!

編輯: 這裏是構造和onScaleBegin

public ScaleListener(){ 
     super(); 
     transformMatrix = new Matrix(); 
     transformMatrix = child.getImageMatrix(); 
     inverseTransformMatrix = new Matrix(); 
     currentFocalPoints = new float[2]; 
} 

@Override 
    public boolean onScaleBegin(ScaleGestureDetector detector){ 

     float startX = detector.getFocusX() + getScrollX(); 
     float startY = detector.getFocusY() + getScrollY(); 

     initialFocalPoints = new float[]{startX, startY}; 

     if(transformMatrix.invert(inverseTransformMatrix)) 
      inverseTransformMatrix.mapPoints(currentFocalPoints, initialFocalPoints); 

     return true; 
    } 
+0

請包括所有相關的代碼。您尚未顯示設置'transformMatrix'的位置。也明白矩陣'[1,0,0] [0,1,0] [0,0,1]',也稱爲單位矩陣,什麼也不做。我不相信如果他們是相同的矩陣,他們不會做同樣的事情,所以在這裏比您所展示的代碼和您的帖子還要多。我懷疑你是將身份矩陣應用於「太小」的圖像,當然這樣的圖像將保持「太小」。 – Simon

+0

我明白身份矩陣什麼都不做,但是我做了很多調用它的調用。它對我來說也沒有任何意義,但它肯定會發生。 – kburbach

回答

0

我仍然爲什麼發生這種情況還沒有確定,但我可以通過調用transformMatrix = new Matrix(child.getImageMatrix())來解決這個問題。這樣它包含了一個孩子imageView矩陣的副本,可以修改。