Używam podglądu, aby wyświetlić to, co kamera widzi na ekranie.
Mogę uzyskać wszystko działające poprawnie, utworzoną powierzchnię, ustawioną i wyświetloną.
Jednak zawsze wyświetla obraz pod nieprawidłowym kątem 90 stopni w trybie portretowym.
Tak jak na zdjęciu:
Zdaję sobie sprawę, że użycie poniższego kodu wyrówna obraz:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Jednak mam podgląd w działaniu, które zawiera inne elementy i nie ma sensu, aby moje działanie było wyświetlane w trybie poziomym. (Jest domyślnie wyłączony)
Zastanawiałem się więc, czy w ogóle można po prostu zmienić orientację podglądu? I pozostawić resztę mojej aktywności poprawnie wyświetlaną w trybie portretowym?
A może w ogóle obrócić podgląd, żeby był poprawnie wyświetlany?
Odpowiedzi:
Wydawało się, że ten problem zaczyna się jako błąd z pewnym sprzętem, patrz tutaj, ale można go rozwiązać, używając wywołania mCamera.setDisplayOrientation (stopnie) dostępnego w API 8. Tak więc implementuję to:
Było to na HTC Desire i musiałem początkowo wprowadzić zapisy logowania w każdym sprawdzeniu rotacji, aby powiedzieć, jaka jest rotacja, a następnie debugowałem na urządzeniu i oglądałem wyjście logCat, gdy obracałem urządzenie. W przypadku HTC Desire, 0 był telefonem, jak można się spodziewać (portret), 90 stopni obracało telefon o 90 stopni w kierunku przeciwnym do ruchu wskazówek zegara (zakładałem, że byłby zgodny z ruchem wskazówek zegara). W kodzie zobaczysz, że nie musiałem obracać wyświetlacza, gdy telefon był ustawiony pod kątem 90 lub 180 stopni - urządzenie wydawało się radzić sobie z tym samo. Tylko jeden punkt nie działa poprawnie: obrót o 270 stopni ma miejsce, gdy obrócisz urządzenie o 90 stopni w prawo, a obrót wyświetlacza jest zgodny, ale jeśli obrócisz urządzenie o 270 stopni w lewo, wydaje się, że nie kompensuje to właściwie.
PS Zwróć uwagę na zamianę szerokości i wysokości w odpowiednich obrotach.
źródło
mCamera.setParameters(parameters);
Stwierdzenie awarii mojej aplikacji, ponieważ wymiary powierzchniowe nie są ważne rozmiar podglądu do mojego telefonu (może dlatego, że utrzymanie pasek stanu widoczny?). Jednak okazało się, że używaniemCamera.setDisplayOrientation(90)
wtedymCamera.setPreviewDisplay(mSurfaceHolder);
bez ustawiania parametrów też działa!spróbuj ustawić orientację wyświetlacza. To rozwiązuje mój problem.
źródło
onPreviewFrame()
oronPictureTaken()
wypróbuj ten kod
źródło
Miałem problem z przednią kamerą (problem do góry nogami). Następnie użyłem następującej metody udokumentowanej w Dokumentach Androida -
źródło
Zrobiłem to, korzystając z porady mCamera.setDisplayOrientation (90); ale także obróciłem bitmapę, ponieważ z jakiegoś powodu inne podejścia nie działają dla mnie w wersji 2.3.3.
Aby obrócić bitmapę, zrobiłem to:
źródło
Porównałem mój kod z tutorialem i ostatecznie naprawiłem to, że umieściłem następujący kod w moim AndroidManifext.xml: W
<activity>
tagu:źródło
źródło
Myślę, że wartość SENSOR_ORIENTATION wyjaśni, jaką wartość należy użyć do obrotu zamiast zakodowania na stałe do 90 stopni
źródło