Проблема: Я ограничил максимальное и минимальное увеличение, все в порядке, но:нужно исправить изображение масштабирования
- Если я пытаюсь увеличить меньше минимального, то для увеличения +, то необходимо сделать такое же движение в противоположном направлении. То же самое с увеличением +. А с технической стороны, это выглядит следующим образом:
значения [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;
}
Помогите.
Очень очень непонятный вопрос. Пожалуйста, подумайте об этом внимательно и придумайте краткий и ясный вопрос. –
Просьба уточнить ваш вопрос, или он, вероятно, сойдет с голосования. Также рассмотрите разбивку кода, чтобы показать соответствующие биты. – nedaRM