2010-03-16 5 views
14

J'essaie l'aperçu de la caméraAndroid - Camera Preview

Ceci est mon code et il ne renvoie aucune erreur, mais l'écran est toujours noir. Des idées?

this.setContentView(R.layout.camerapreview);  
SurfaceView cameraSurface = (SurfaceView)findViewById(R.id.cpPreview); 
SurfaceHolder holder = cameraSurface.getHolder(); 
holder.addCallback(this); 
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
this.camera = Camera.open(); 
this.camera.setPreviewDisplay(holder); 
this.camera.startPreview(); 

camerapreview.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <SurfaceView 
     android:id="@+id/cpPreview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center"> 

    </SurfaceView> 
</LinearLayout> 

Répondre

46

Vous appelez les trois dernières lignes trop tôt. Vous devez attendre que la surface soit préparée avant d'appeler setPreviewDisplay() et vous devez attendre que la surface soit dimensionnée (surfaceChanged()) avant d'appeler startPreview(). This project a ce dont vous avez besoin.

+0

Cela fonctionne très bien. Question supplémentaire Sur Android 2.3 et 3.0, l'aperçu semble être faussé lorsque nous faisons pivoter l'appareil. Avez-vous une solution pour cela aussi? –

+1

@NileshPawar: Je ne sais pas ce que vous voulez dire par "biaisé" dans cette situation. FWIW, mon travail actuel de caméra est à: https://github.com/commonsguy/cwac-camera – CommonsWare

+0

Oh wow. le Camera-demov9 de votre nouveau code a résolu le problème !! Je vais obtenir un diff de ce que je faisais différent et le poster ici pour le bénéfice de tout le monde. Triste que Google documentaion soit obscure dans ces domaines. –

Questions connexes