2013-09-10 27 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矩阵的副本,可以修改。