2013-09-16 5 views
0

Проблема: Я ограничил максимальное и минимальное увеличение, все в порядке, но:нужно исправить изображение масштабирования

  • Если я пытаюсь увеличить меньше минимального, то для увеличения +, то необходимо сделать такое же движение в противоположном направлении. То же самое с увеличением +. А с технической стороны, это выглядит следующим образом:

значения [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; 
     } 

Помогите.

+1

Очень очень непонятный вопрос. Пожалуйста, подумайте об этом внимательно и придумайте краткий и ясный вопрос. –

+0

Просьба уточнить ваш вопрос, или он, вероятно, сойдет с голосования. Также рассмотрите разбивку кода, чтобы показать соответствующие биты. – nedaRM

ответ

0

Используйте один параметр scale, который изменен в методе onScale. Также используйте две константы minScale и maxScale. В методе onScale проверьте, подходит ли новый шкала в допустимый интервал, и если это произойдет - перерисуйте изображение с новой шкалой.

Прямо сейчас ваш код в беспорядке. Как-то limit min-zoom чек находится внутри limit max zoom, но методы масштабирования распространяются повсюду. Таким образом, это очень нечисто, когда новый масштаб становится актуальным и почему он работает неправильно.

Смежные вопросы