surfaceCreated n'est pas appelé

Je suis en train de mettre un aperçu de la caméra (SurfaceView) avec un bouton sur l'écran, mais tout ce que j'obtiens est un écran vide indiquant uniquement le bouton. Si je suis réglage de la SurfaceView que le seul contenu (avec setContentView(surfaceView) puis l'aperçu affiche bien à l'écran. Ce que je fais mal?

Merci d'avance

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_weight="1">
        <SurfaceView
            android:id="@+id/camera_surface"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
        <Button 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:text="@string/trigger"
            android:id="@+id/trigger_picture_button" 
            android:layout_gravity="bottom" />
    </FrameLayout>
</LinearLayout>

Mon Activité:

public class CameraActivity extends Activity {

    private SurfaceView cameraPreview;
    private Button triggerPicture;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);

        cameraPreview = (SurfaceView) findViewById(R.id.camera_surface);
        triggerPicture = (Button) findViewById(R.id.trigger_picture_button);

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        cameraPreview = new CameraPreview(this);
//     setContentView(cameraPreview);
    }

Mon CameraPreview:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {

private SurfaceHolder holder;
private Camera camera;

public CameraPreview(Context context) {
    super(context);
    holder = getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
    camera = openFrontFacingCamera();
    try {
        camera.setPreviewDisplay(holder);
    } catch (IOException e) {
        camera.release();
        camera = null;
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    camera.stopPreview();
    camera.release();
    camera = null;
}

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPreviewSize(width, height);
    parameters.set("orientation", "portrait");
    camera.setParameters(parameters);
    camera.startPreview();
}

private Camera openFrontFacingCamera() {
    //returns Camera.open(
}

OriginalL'auteur Hans Muff | 2011-05-06