Estoy trabajando en mi primera aplicación de Android "real", un editor de flujo de trabajo gráfico. El dibujo se realiza en una clase personalizada, que es una subclase de Vista. En el momento en que mis elementos son rectángulos, que se dibujan en un lienzo. Para detectar acciones en los elementos comparo las coordenadas y verifico los elementos en la ubicación táctil.zoom centrado en vista personalizada - cálculo de coordenadas de lienzo
para implementar un gesto de zoom Probé http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html
Con la canvas.scale 4 argumento (...) La función de zoom centrada funciona bien, pero yo no pierda la capacidad de calcular el lienzo coordenadas mediante el desplazamiento con mPosX y mPosY para detectar si el toque después de un zoom está en un elemento.
He intentado cambiar el ejemplo de la entrada de blog anterior para centrar el lienzo sobre el gesto de zoom con:
canvas.save();
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor, mScalePivotX, mScalePivotY);
//drawing ....
canvas.restore();
No he encontrado ningún ejemplo de cómo esto podría hacerse sin perder el offset de referencia para calcular las coordenadas ¿Hay una solución fácil? Intenté calcular el desplazamiento con el centro de gestos y el factor de escala, pero fallé:/
He visto que otros ejemplos que usan un ImageView a menudo usan una matriz para transformar la imagen. ¿Podría hacerse esto con una vista personalizada y un lienzo? En caso afirmativo, ¿cómo puedo obtener el desplazamiento xey para verificar las coordenadas?
Además, si mis ideas son completamente erróneas, me gustaría ver algunos ejemplos sobre cómo se hace correctamente.
Thx! ;)
hola, estoy enfrentando el problema de centrar el zoom. actualmente, cuando hago zoom, va al punto (0,0) y estoy usando este método canvas.scale (scaleFactor, scaleFactor) ;. ¿Cómo calculas ScalePivotX y scalePivotY? Gracias – sajjoo