画像ビューをズームするとき、ピンチズーム中に画像が最小サイズよりも小さくなることを許可し、onScaleEnd
メソッドで最小サイズに復元します。しかし、私は問題に直面しています:
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;
}