Pour le mode portrait je vais poster ce que j'ai trouvé, sachant que c'est pas parfait (j'ai un bug sur la preview quand je viens de certaines Activité (pas toute)).
Donc dans :
CameraConfigurationManager dans la méthode setDesiredCameraParameters il faut dire qu'on est en mode portrait.
1 2
| camera.setDisplayOrientation(90);
parameters.set("orientation", "portrait"); |
Ensuite dans CameraManager il faut modifier la gestion du rectangle de preview dans la méthode getFramingRectInPreview.
1 2 3 4
| rect.left = rect.left * cameraResolution.y / screenResolution.x;
rect.right = rect.right * cameraResolution.y / screenResolution.x;
rect.top = rect.top * cameraResolution.x / screenResolution.y;
rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y; |
Pour gérer la taille du rectangle c'est dans la méthode getFramingRect, moi j'ai fais un peu bourrin mais il faut recalculer les positions pour pas afficher le rectangle plus haut que large (car on est en mode portrait).
Ensuite dans la partie de décodage il faut penser à retourner l'image donc dans DecodeHandler dans la méthode decode on retourne l'image et on inverse les tailles passé à buildLuminanceSource :
1 2 3 4 5 6 7 8
| byte[] rotatedData = new byte[data.length];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++)
rotatedData[x * height + height - y - 1] = data[x + y * width];
}
int tmp = width;
width = height;
height = tmp; |
Sinon dans le Manifest on spécifie normalement l'orientation, mais ici on pourra le gérer dans CaptureActivity avec :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Je précise que ce que je viens d'écrire c'est dans le cas d'un lancement de l'activité directement en mode portrait (ou en gérant avec les préférences de l'application), ça ne gère pas la rotation de l'écran en direct (les tests que j'ai fait n'étais pas concluant).
Sinon si quelqu'un a une idée pour le bug que j'ai décris en haut, donc si je lance en mode landscape et de n'importe où MainActivity ou ActivitySecondaire tout marche. Par contre si je lance pour la première fois en mode portrait depuis ActivitySecondaire ça ne marche pas la preview de CaptureActivity , semble afficher un élément du layout de ActivitySecondaire, d'ailleurs si je suis dans CaptureActivity en mode portrait et que je lance ActivitySecondaire, certains éléments du layout ne s'affiche pas (invisible, j'arrive à cliquer sur les boutons sans les voir).
Partager