當縮放圖像視圖時,允許圖像在縮放縮放時變得小於最小大小,然後在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