Estoy tratando de usar la cámara (android.graphics.Camera no la cámara de hardware) para rotar un lienzo de vistas alrededor de un punto específico , en este caso, el medio del lienzo.Cómo rotar un lienzo en un punto específico usando android.graphics.Camera.rotateX (ángulo)
En dispatchDraw (Canvas canvas) - por brevedad, omito todas las partes no importantes.
camera.save();
camera.rotateX(0);
camera.rotateY(0);
camera.rotateZ(angle);
camera.getMatrix(cameraMatrix);
camera.restore();
canvas.concat(cameraMatrix);
El lienzo gira, pero siempre desde la esquina superior izquierda.
NOTA: Debido a que el lienzo se ha construido para ser más grande que el área de visualización También tengo que traducir el resultado final de manera que quede centrado en la pantalla, no puedo hacer esto con cualquiera
canvas.translate(xOffset,yOffset) PRIOR to calling the camera methods
O
cameraMatrix.preTranslate(xOffset,yOffset) AFTER the camera methods
Tanto centrar correctamente la lona en la pantalla, pero me parece que no puede conseguir el punto de rotación para ser el centro de la llamada camera.rotateZ (ángulo), intentado usar los métodos de la muestra androide 3D, pero mientras parecen trabajar para el eje X/Y, no parecen afectar el eje Z
Cualquier ayuda sería apreciada, los documentos no son exactamente detallados.
Hola gracias por este post, pero no soy capaz de entender el cuál va a ser el valor de translateX, translateY y centerScaled variables. ¿Puedes por favor explicarme? – Dhaval
@Dhaval por favor revise http://www.inter-fuser.com/2009/08/android-animations-3d-flip.html – Ankit
En realidad, esta parece ser la solución correcta.Dado que 'Camera # applyToCanvas()' puede no funcionar para algunos dispositivos ICS –