当缩放图像视图时,允许图像在缩放缩放时变得小于最小大小,然后在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;
}
请包括所有相关的代码。您尚未显示设置'transformMatrix'的位置。也明白矩阵'[1,0,0] [0,1,0] [0,0,1]',也称为单位矩阵,什么也不做。我不相信如果他们是相同的矩阵,他们不会做同样的事情,所以在这里比您所展示的代码和您的帖子还要多。我怀疑你是将身份矩阵应用于“太小”的图像,当然这样的图像将保持“太小”。 – Simon
我明白身份矩阵什么都不做,但是我做了很多调用它的调用。它对我来说也没有任何意义,但它肯定会发生。 – kburbach