2012-08-08 10 views
6

問題があります。プレビューのためにカメラを初期化し、別のアプリにフォーカスを移してから、私のアプリに戻ります。プレビューは黒く表示されます。私が写真を撮り続けると、私はカメラを普通に指し示すところの写真を撮ります。OnResume Camera Reinitブラック画面

OnResume()オーバーライドで何か問題がありますか?相対コードは次のとおりです。

public void ReleaseCamera() 
    { 
     if (myCamera != null) 
     { 
      myCamera.Release(); 
      myCamera = null; 
     } 
    } 

protected override void OnPause() 
    { 
     base.OnPause(); 

     if (myButtonState == ButtonState.CameraActive) 
      ReleaseCamera(); 
    } 

protected override void OnResume() 
    { 
     base.OnResume(); 

     if (myButtonState == ButtonState.CameraActive) 
      InitializeCamera(); 
    } 

private void InitializeCamera() 
    { 
     SurfaceView mySurfaceView = FindViewById<SurfaceView>(Resource.Id.surfaceView1); 

     myCamera = Android.Hardware.Camera.Open(cameraNumber); 
     Android.Hardware.Camera.Parameters p = myCamera.GetParameters(); 

     myCamera.SetDisplayOrientation(90); // Portrait 
     myCamera.SetPreviewDisplay(mySurfaceView.Holder); 
     myCamera.StartPreview(); 
    } 

ありがとうございました。 :)

答えて

6

onResume()が早すぎます。この段階では、サーフェスホルダーを準備していません。アクティビティにonPostResume()ハンドラを導入したり、SurfaceHolder.Callback.surfaceChanged()イベントを処理したりすることができます。

+1

SurfaceHolderコールバックを使用していただき、ありがとうございました。 :) – Ecnelis