Canvas Zoom идет в точку (0,0) - PullRequest
       28

Canvas Zoom идет в точку (0,0)

5 голосов
/ 13 января 2012

У меня проблема с масштабированием холста.Я сделал настраиваемый вид, в котором я рисую диаграммы отношений, теперь, когда я уменьшаю холст, переходит в положение (0,0).Я видел разные темы и вопросы, но не смог найти подходящий ответ.

Что я делаю в методе onDraw:

  canvas.scale(mScaleFactor, mScaleFactor);

Я также видел метод canvas.scale (x, y, px, py), но я не знаю, как его получить.опорные точки x и y.

public boolean onScale(ScaleGestureDetector detector) {

mScaleFactor *= detector.getScaleFactor();
// Don't let the object get too small or too large.
mScaleFactor = Math.max(0.4f, Math.min(mScaleFactor, 5.0f));
if(mScaleFactor>=1)
   mScaleFactor=1f; 

invalidate();
return true;

}

Ответы [ 2 ]

9 голосов
/ 13 января 2012

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

canvas.scale(x, y, px, py);

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

float cX = canvas.getWidth()/2.0f; //Width/2 gives the horizontal centre
float cY = canvas.getHeight()/2.0f; //Height/2 gives the vertical centre

А затем вы можете масштабировать его, используя следующие координаты:

canvas.scale(x, y, cX, cY);
0 голосов
/ 23 апреля 2012
...