2010-03-16 4 views
14

Я пытаюсь просмотреть предварительный просмотр камерыAndroid - просмотр камеры

Это мой код, и это не вызывает никаких ошибок, но экран по-прежнему остается черным. Есть идеи?

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> 

ответ

46

Вы вызываете три последние строки слишком рано. Вам нужно подождать, пока поверхность будет подготовлена ​​до вызова setPreviewDisplay(), и вам нужно дождаться, когда поверхность будет размером (surfaceChanged()), прежде чем звонить startPreview(). This project имеет то, что вам нужно.

+0

Это отлично работает. Дополнительный вопрос. На Android 2.3 и 3.0 предварительный просмотр, кажется, перекошен, когда мы вращаем устройство. У вас тоже есть решение для этого? –

+1

@NileshPawar: Я не знаю, что вы подразумеваете под «перекосом» в этой ситуации. FWIW, моя текущая работа камеры находится по адресу: https://github.com/commonsguy/cwac-camera – CommonsWare

+0

О, ничего себе. Камера-demov9 из вашего нового кода решила проблему! Я получу разницу в том, что я делал по-разному, и разместил его здесь для всех. Печально, что документация Google неясна в этих областях. –