2012-06-09 23 views
7

Necesito obtener únicamente datos de vista previa de cámara, pero vista previa no visible. Como hago todo esto en un servicio, tuve que crear un SurfaceView ficticio, que funciona muy bien.SurfaceView invisible para vista previa de la cámara

he utilizado el código de esta respuesta: https://stackoverflow.com/a/10268650/1395697

Sin embargo, con TYPE_SYSTEM_OVERLAY no funcionó. Era invisible, pero no se recibieron datos de vista previa (en onPreviewFrame()). Cuando cambio este argumento a 0, obtengo datos de vista previa, pero el SurfaceView está visible.

¿Conoces alguna otra forma de hacerlo?

Lo que hice ahora se acaba de hacer una visible SurfaceView con anchura y altura de 1 y luego crear una superposición ImageView con un color específico para que no se ve el cambio de color de la SurfaceView. Pero esto no es nada bueno y realmente me gustaría hacerlo un poco mejor.

+0

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

Respuesta

-1

En realidad, no tiene que colocar SurfaceView en su UI. Nos encontramos con el mismo problema e hicimos un SurfaceView ficticio. Aquí está nuestro código:

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

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

Eso es lo que yo también pensé. la mayoría de los dispositivos incluso funcionan sin una pantalla de vista previa, por lo que su método obviamente también funciona en estos dispositivos. Sin embargo, en algunos dispositivos como HTC One X o Google Nexus One no funciona sin SurfaceView ni con su método – DominicM

+0

Holy crap. Gracias por resolver nuestro problema Tampoco teníamos que probarlo, así que no teníamos idea de qué estaba pasando. ¡Muy apreciado! : D –

+0

No tenía uno de esos para probarlo tampoco, pero recibí algunos informes de errores, así que lancé una actualización con su método y les pregunté si funcionaba ahora y todavía no. Con la nueva actualización, finalmente funcionó (con el método en mi pregunta) pero aún me gustaría mejorar, ya que mi método es realmente horrible, creo ... – DominicM

1

También utilicé la misma respuesta Stackoverflow, y sale el mismo problem.so:

He añadido este código

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

a mi método surfaceChanged, en vez de la actividad (o un servicio en mi caso), y lo obtuve transparente, pero el registro se queja en marcos abandonados :(

Cuestiones relacionadas