Lienzo Zoom va al punto (0,0)
Tengo un problema en el zoom del lienzo. He hecho una vista personalizada en la que estoy dibujando diagramas de relación ahora cuando alejo el lienzo en va a la posición (0,0). He visto diferentes hilos y preguntas pero no pude encontrar la respuesta apropiada.
Lo que estoy haciendo en el método onDraw es.
- Cómo establecer el nivel de zoom MapView en onCreate ()?
- Cómo habilitar la función de zoom in / out (dos dedos) para una imagen en android
- ¿Por qué los navegadores móviles cargan mi página completamente ampliada?
- Desplazamiento / zoom de una escena en OpenGL y subdivisión
- Ampliación de Android en capas dinámicamente cambiantes
canvas.scale(mScaleFactor, mScaleFactor);
También he visto el método canvas.scale (x, y, px, py) pero no sé cómo obtener los puntos de pivote de xyy.
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;
}
- Cómo dibujar en un lienzo de vista sin upscaling artefactos cuando el padre de vista tiene un factor de escala?
- Android imageView: configuración de los parámetros de arrastrar y comprimir el zoom
- Obtener el nivel de zoom de mapa para determinados límites en Android como en JS API de Google Maps: map.getBoundsZoomLevel (límites)
- Los eventos de zoom que funcionan en un androide Mapview
- Android - Google Maps api v2 - Desactivar el control de zoom
- Android ViewGroup.setScaleX () hace que la vista se recorte
- ¿Cómo puedo obtener funcionalidad de zoom para las imágenes?
- Android MapView - botones de zoom personalizados
Los puntos de pivote son básicamente el punto que su lienzo será transformado alrededor, por lo que la escala con un pivote de 0,0 hace que encoger hacia ese punto. Utilizando el siguiente método puede cambiar el punto de pivote a donde lo desee:
canvas.scale(x, y, px, py);
Ahora para las cosas nuevas: Si quieres que tu lienzo sea escalado hacia su centro, solo tendrás que saber el punto en medio de tu lienzo:
float cX = canvas.getWidth()/2.0f; //Width/2 gives the horizontal centre float cY = canvas.getHeight()/2.0f; //Height/2 gives the vertical centre
Y luego se puede escalar con esas coordenadas:
canvas.scale(x, y, cX, cY);
Eche un vistazo a estas dos respuestas, que describen el problema y sus soluciones muy bien.
Android Bitmap / Desplazamiento de lienzos después de la escala
Escala de imagen de ImageView mientras mantiene el punto central en el mismo lugar
- Después del cambio de orientación, el menú de opciones del fragmento no desaparece
- Uso de javascript para capturar fotos desde iPhone / Android Cámara