问题:我限制了最大和最小缩放,一切正常,但是:
值[Matrix.MSCALE_X] 会发生变化,尽管之前是:
m.reset();
m.setScale(sx1, sx1);
其中 sx1 是 FIXED 值。这是我的代码:
public boolean onScale(ScaleGestureDetector detector) {
try{
saved_gest_scale = newScale;
newScale *= detector.getScaleFactor();
scaleFactor = newScale / oldScale;
target_img_width *= 1/scaleFactor;
if (target_img_width > width)//limit max zoom
{
//fit on screen:
m = new Matrix();
m.reset();
float w_coef = img_width / width;
float sx1 = 1/w_coef;
m.setScale(sx1, sx1);
///========
//apply new size
float sx2 = target_img_width/width;
sx2 = 1/sx2;
m.setScale(sx2, sx2);
float[] values = new float[9];
m.getValues(values);
//center image:
float globalX = values[Matrix.MTRANS_X];
float globalY = values[Matrix.MTRANS_Y];
float wid = values[Matrix.MSCALE_X]*img_width;
float heig = values[Matrix.MSCALE_Y]*img_height;
m.postTranslate(width/2 - wid/2, height/2-heig/2);
if (wid <= width)//limit min-zoom
{
newScale = sx1;
m = new Matrix();
m.reset();
m.setScale(sx1, sx1);
wid = sx1*img_width;
heig = sx1*img_height;
debug.setText(wid + "<width" + "mx=" + values[Matrix.MSCALE_X] );
m.postTranslate(width/2 - wid/2, height/2-heig/2);
}
iw.setImageMatrix(m);
}
oldScale = newScale;
}catch (Exception xx)
{
debug.setText("detector "+ xx.toString());
}
return true;
}
请帮忙。
答案 0 :(得分:0)
使用scale
方法中更改的一个参数onScale
。还使用两个常量minScale
和maxScale
。在onScale
方法中检查新比例是否符合可接受的间隔,如果符合,则用新比例重新绘制图像。
现在你的代码一团糟。某种方式limit min-zoom
检查位于limit max zoom
内,但缩放方法遍布各地。因此,当一个新的规模变为现在以及为什么它工作错误时,它是非常不洁净的。