Comment faire pivoter une toile à un point spécifique en utilisant android.les graphiques.De la caméra.rotateX(angle)
Je suis en train d'utiliser l'Appareil (android.les graphiques.L'appareil n'est pas le matériel de l'appareil photo) pour faire pivoter une vue sur toile autour d'un point précis, en l'occurrence le milieu de la toile.
Dans dispatchDraw(Canvas canvas) -- pour des raisons de concision, je pars tous les non parties importantes.
camera.save();
camera.rotateX(0);
camera.rotateY(0);
camera.rotateZ(angle);
camera.getMatrix(cameraMatrix);
camera.restore();
canvas.concat( cameraMatrix );
La toile tourne, mais toujours à partir du coin supérieur gauche.
REMARQUE: Parce que la toile a été construit pour être plus grande que la zone d'affichage, j'ai aussi besoin de traduire le résultat final afin qu'il soit centré dans l'écran, je peux le faire avec
canvas.translate(xOffset,yOffset) PRIOR to calling the camera methods
OU
cameraMatrix.preTranslate(xOffset,yOffset) AFTER the camera methods
À la fois de centrer correctement la toile de l'écran mais je n'arrive pas à obtenir le point de rotation pour être le centre de la caméra.rotateZ(angle) appel, essayé d'utiliser les méthodes de la 3D android de l'échantillon, mais tandis qu'ils semblent travailler pour l'axe X /Y ne semble pas affecter l'axe Z
Toute aide serait appréciée, le doc ne sont pas très détaillé.
Vous devez vous connecter pour publier un commentaire.
Résolu ce problème, vous ne savez pas si c'est le meilleur moyen, mais il fonctionne. La solution a été de
Traduire la toile d'abord au centre de la grande toile de l'écran
Puis appliquer la caméra rotations
Alors d'utiliser le pré-et post-traduire des méthodes sur la matrice de changer le point de rotation similaire à ce que l'android de l'échantillon n'.
Les bits manquants ont été à faire de la toile de la traduction de la première, et j'ai aussi été pas à l'aide de la plus grande taille du canevas pour calculer les décalages pour le pré et post traduire méthodes.
Voici le code modifié si cela aide quelqu'un d'autre.
Si quelqu'un a une meilleure façon ou d'voit un problème s'il vous plaît laissez un commentaire.
Camera#applyToCanvas()
peut ne pas fonctionner pour certains sa périphériquesCela a fonctionné pour moi:
J'aime faire les choses de la voie difficile et de "rouler" les miens".
En outre, si vous faites des animations cumulatif des erreurs peuvent se glisser dans concat avec la Matrice de l'.
Ce que la transformation de l'animation de la classe