2012-06-09 17 views
7

Ho bisogno di ottenere solo i dati di anteprima della fotocamera, ma non l'anteprima visibile. Dato che sto facendo tutto questo in un servizio, ho dovuto creare un manichino SurfaceView, che funziona molto bene.Invisibile SurfaceView per anteprima fotocamera

Ho usato il codice da questa risposta: https://stackoverflow.com/a/10268650/1395697

Tuttavia, con TYPE_SYSTEM_OVERLAY non ha funzionato. Era invisibile ma non sono stati ricevuti dati di anteprima (in onPreviewFrame()). Quando cambio questo argomento a 0, ottengo i dati di anteprima, ma il SurfaceView è visibile.

Conosci qualche altro modo per farlo?

Quello che ho fatto oggi è solo fare un visibile SurfaceView con larghezza e l'altezza di 1 e poi creo un ImageView sovrapposizione con un colore specifico in modo che non si vede il cambiamento di colore della SurfaceView. Ma questo non è affatto pulito e mi piacerebbe davvero farlo un po 'meglio.

+0

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

risposta

-1

In realtà non è necessario posizionare SurfaceView sull'interfaccia utente. Stavamo riscontrando lo stesso problema e abbiamo creato un fittizio SurfaceView. Ecco il nostro codice:

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

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

Questo è quello che ho pensato anch'io.la maggior parte dei dispositivi funziona anche senza una visualizzazione di anteprima, quindi il tuo metodo ovviamente funziona anche su questi dispositivi. Tuttavia, su alcuni dispositivi come HTC One X o Google Nexus One non funziona senza SurfaceView né con il tuo metodo – DominicM

+0

Holy crap. Grazie per aver risolto il nostro problema. Non dovevamo neanche provarlo, quindi non avevamo idea di cosa stesse succedendo. Molto apprezzato! : D –

+0

Non avevo nemmeno uno di quelli da testare, ma ho ricevuto alcune segnalazioni di bug, quindi ho rilasciato un aggiornamento con il tuo metodo e ho chiesto loro se funzionava ora e ancora non funzionava. Con il nuovo aggiornamento ha finalmente funzionato (con il metodo nella mia domanda), ma mi piacerebbe comunque migliorarlo dal momento che il mio metodo è davvero orribile, penso ... – DominicM

1

ho usato anche la stessa risposta StackOverflow, e ottengo lo stesso problem.so:

Ho aggiunto questo codice

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

al mio metodo surfaceChanged, invece dell'attività (o un servizio nel mio caso), e l'ho ottenuto trasparente, ma il log si lamenta sui frame abbandonati :(

Problemi correlati