2012-06-09 18 views
7

Potrzebuję tylko danych podglądu z kamery, ale nie widać podglądu. Ponieważ robię to wszystko w serwisie, musiałem stworzyć atrapy SurfaceView, który działa bardzo dobrze.Niewidoczny podgląd powierzchni dla podglądu kamery

Użyłem kodu z tej odpowiedzi: https://stackoverflow.com/a/10268650/1395697

Jednak z TYPE_SYSTEM_OVERLAY to nie działa. Był niewidoczny, ale nie otrzymano żadnych danych podglądu (w onPreviewFrame()). Kiedy zmienię ten argument na 0, otrzymam podgląd danych, ale SurfaceView jest widoczny.

Czy znasz inny sposób na zrobienie tego?

Co zrobiłem teraz jest po prostu uczynić widoczną SurfaceView z szerokości i wysokości 1, a następnie utworzyć ImageView nakładkę z konkretnym kolorze, tak że nie widać zmianę koloru SurfaceView. Ale to wcale nie jest miłe i chciałbym zrobić to trochę lepiej.

+0

Zobacz http://stackoverflow.com/questions/22462360/ – fadden

Odpowiedz

-1

Nie musisz w ogóle umieszczać SurfaceView na swoim interfejsie użytkownika. Pracowaliśmy nad tym samym problemem i wykonaliśmy atrapę SurfaceView. Oto nasz kod:

SurfaceView dummy = new SurfaceView(c); 
try { 
    mCamera.setPreviewDisplay(dummy.getHolder()); 
} catch (IOException e) { 

} 
mCamera.setPreviewCallback(this); 
mCamera.startPreview(); 
+2

To jest to, co też myślałem. większość urządzeń działa nawet bez wyświetlania podglądu, więc twoja metoda oczywiście działa również na tych urządzeniach. Jednak na niektórych urządzeniach, takich jak HTC One X czy Google Nexus One, nie działa bez SurfaceView ani z metodą – DominicM

+0

Holy crap. Dziękujemy za rozwiązanie naszego problemu. Nie musieliśmy tego sprawdzać, więc nie mieliśmy pojęcia, co się dzieje. Bardzo doceniane! : D –

+0

Nie miałem też jednego z tych testów, ale dostałem kilka raportów o błędach, więc wydałem aktualizację z twoją metodą i spytałem ich, czy zadziałało, i tak się nie stało. Z nową aktualizacją w końcu działała (z metodą w moim pytaniu), ale nadal chciałbym ją poprawić, ponieważ moja metoda jest naprawdę okropna, myślę ... – DominicM

1

użyłem również taką samą odpowiedź StackOverflow, i uzyskać ten sam problem.so:

Dodałem ten kod

this.setZOrderOnTop(true); 
SurfaceHolder h = this.getHolder(); 
h.setFormat(PixelFormat.TRANSPARENT); 

do mojego surfaceChanged metody, zamiast aktywności (lub usługi w moim przypadku) i dostałem ją trasparent, ale Log narzeka na opuszczone ramki :(

Powiązane problemy