2014-04-29 26 views
6

Mam aplikację aparatu fotograficznego, która pozwala użytkownikowi na robienie zdjęć. Na moim głównym ekranie mam kamerę wyświetlaną na SurfaceView. Gdy użytkownik robi zdjęcie, wywołuję funkcję camera.autoFocus i wywołuję zwrotną funkcji AutoFocusCallback, którą nazywam camera.takePicture. Następnie zapisuję zdjęcie i przechodzę do innej czynności, aby wyświetlić podgląd zdjęcia. Wywołuję camera.stopPreview() podczas opuszczania strony kamery (onPause) i camera.startPreview() po powrocie (onResume).Android Camera.autoFocus i FOCUS_MODE_CONTINUOUS_PICTURE

Aparat jest inicjowany za pomocą FOCUS_MODE_CONTINUOUS_PICTURE. Nie oddaję do recyklingu kamery po powrocie na stronę aparatu (ponieważ jest to powolna operacja, która trwa ~ 2 sekundy), ale po prostu wywołaj startPreview, jeśli kamera została wcześniej zainicjalizowana.

Oto mój problem. Przed zrobieniem pierwszego zdjęcia ciągły autofokus działa dobrze, ponieważ FOCUS_MODE_CONTINUOUS_PICTURE jest początkowo ustawiony w aparacie. Jednak po wywołaniu camera.autoFocus, FOCUS_MODE_CONTINUOUS_PICTURE przestaje działać. Później, gdy powrócę do tego samego ekranu i zadzwonię do startPreview, ciągłe auto focus nie będzie już działać.

Czy istnieje sposób na ponowne uruchomienie ciągłego autofokusa bez konieczności ponownego uruchamiania aparatu? Chciałbym uniknąć ponownego uruchomienia kamery, ponieważ powoduje to kilka sekund opóźnienia dla użytkownika.

Odpowiedz

17

Rozwiązałem problem, dzwoniąc do camera.cancelAutoFocus(). To spowodowało, że ciągły autofokus ponownie wskoczył.

+2

Jeśli aplikacje chcą wznowić fokus ciągły, musi zostać wywołany cancelAutoFocus. Ponowne uruchomienie podglądu nie wznowi ciągłego autofokusa. http://developer.android.com/reference/android/hardware/Camera.Parameters.html#FOCUS_MODE_CONTINUOUS_PICTURE –