2013-04-12 16 views
5

Sto provando a creare un'applicazione che accede alla videocamera Android, ottiene una cornice (immagine), la elabora, quindi riavvia il processo, tutto ciò fornendo un'anteprima uniforme sullo schermo.setOneShotPreviewCallback non richiamare il mio metodo

Faccio questo ottenendo un frame chiamando camera.setOneShotPreviewCallback(...), elaborando i dati ricevuti nel mio callback, quindi chiamando setOneShotPreviewCallback di nuovo.

Il problema è che non riesco ad avviare il processo inserendo setOneShotPreviewCallback nella funzione onResume() dell'attività principale. Se lo faccio, il mio callback non viene mai chiamato.

Vedere il seguente codice di prova:

public void onResume() { 
    super.onResume(); 
    camera = getCameraInstance(); 

    cameraPreviewSurface = new CameraPreview(this, camera); 
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
    preview.removeAllViews(); 
    preview.addView(cameraPreviewSurface); 
    camera.setOneShotPreviewCallback(cameraPreviewCallback); 

    Button button = (Button) findViewById(R.id.button_capture); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      camera.setOneShotPreviewCallback(cameraPreviewCallback); 
     } 
    }); 
} 

Quando l'applicazione viene avviata, la richiamata non viene mai chiamato, ma non appena si preme il pulsante, ottengo un callback.

Ho provato a utilizzare setOneShotPreviewCallback nella mia classe CameraPreview, dopo camera.startPreview();, ma il mio metodo non è stato ancora chiamato.

risposta

4

Ho trovato il problema. Per qualche motivo, il callback deve essere impostato dopo l'inizializzazione della superficie di anteprima.

Nel mio caso, dal momento che stavo usando un SurfaceView personalizzato ho dovuto applicare il callback sia nelle funzioni surfaceCreated e surfaceChanged.

camera.setPreviewDisplay(surfaceHolder); 
camera.startPreview(); 
camera.setOneShotPreviewCallback(cameraPreviewCallback); 
Problemi correlati