2011-07-18 13 views
0

私は基本的に画面の下部にボタンとスペースの残りの部分を撮影するカメラのプレビューを持つアプリケーションを作成しようとしています。私はCameraPreview example codeを出発点として使用しています。 CameraPreviewはプログラムでViewGroupを作成し、それ自体で正常に動作します。このViewGroupを、XMLを使用してレイアウトで作成した別の「ビューコンテナ」内に配置したいと思っています。コンテナ内にViewGroupを配置する

基本的に、私はCameraPreview ViewGroupを埋め込むレイアウトとスペースを持っています。

ありがとうございます。

+0

これはかなり簡単なはずです。もしそうなら、彼らは何でしたか? – Idistic

+0

私は市民のconnのような何かを試してみましたが、プレビューはありません、ただ黒い空きスペースです。 – fromvega

答えて

0

私の代わりにこれを考える:

mPreview = new Preview(this); 
setContentView(mPreview); 

これをしたいと思う:

mPreview = new Preview(this); 
setContentView(R.layout.YOUR_XML_LAYOUT); 
RelativeLayout yourLayoutContainer = (RelativeLayout) findViewById(R.id.YOUR_LAYOUT_CONTAINER_ID); 
yourLayoutContainer.addView(mPreview); 
+0

ありがとうございます。私はこれを試してみましたが、プレビューは表示されません、ただ黒い空白です。 – fromvega

0

これは非常私は実際に私のカメラのコードを持っても、削除エラーチェックと様々なコールバックで簡略化されています別のクラスで私は別のアプリケーションで使うことができますが、正しい方向に動かす必要はありません。私はここには表示していませんが、私はプレビューと1つの親コンテナにさまざまなオーバーレイを持っています、基本的なアンドロイドカメラのグリッチ以外の問題は一度もありませんでした(常に横向きでなければなりません。 。)

public class CameraActivity extends Activity { 

    private SurfaceView cameraSurface = null; 
    private myCamera  camera  = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.camerasurface); 

     cameraSurface = (SurfaceView) this.findViewById(R.id.cameraSurface); 
     camera  = new bThereCamera(this,cameraSurface); 
} 

カメラの活動のためのXML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <SurfaceView android:id="@+id/cameraSurface" 
       android:layout_height="fill_parent" 
       android:layout_width="fill_parent"/> 

</RelativeLayout> 

、非常に単純化されたカメラのクラス(カメラクラスは活動の存続期間にバインドされているので、コンテキストが渡されていると問題はないはずです)、これは単なる実装であるため、すべてを単一のクラスに沿って行うことはできません。すべてのコールバックはまた、あなたが本当に(それ以降のバージョンを取得する場合、それは非互換性のあるものを持っています)2.1のためのAndroidカメラアプリのバージョンをダウンロードしてカメラに掘るしたい場合は最低限

public class myCamera implements SurfaceHolder.Callback { 

private Camera  cameraDevice   = null; 
private SurfaceView cameraSurface  = null; 
private SurfaceHolder cameraSurfaceHolder = null; 


public myCamera(CameraActivity activity, SurfaceView surface) 
{ 
    parent    = activity; 
    cameraSurface  = surface; 
    cameraSurfaceHolder = cameraSurface.getHolder(); 
    cameraSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    cameraSurfaceHolder.addCallback(this); 
} 

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 
{ 
    Camera.Parameters params = cameraDevice.getParameters(); 
    Camera.Size  size = getBestPreviewSize(params,w,h); 

    if (size != null) 
     params.setPreviewSize(size.width, size.height); 

    cameraDevice.setParameters(params); 
    cameraDevice.startPreview(); 
} 

public void surfaceCreated(SurfaceHolder holder) 
{ 
    try { 
     // Get the device interface 
     cameraDevice = Camera.open(); // This is different for 2.2 and 2.3+ you will need 
             // a mediator class if you want to use both ... 
     cameraDevice.setPreviewDisplay(cameraSurfaceHolder); 
    } catch (IOException e) { } 
} 

public void surfaceDestroyed(SurfaceHolder holder) 
{ 
    if (null == cameraDevice) 
     return; 
    cameraDevice.stopPreview(); 
    cameraDevice.release(); 
    cameraDevice = null; 
} 



public Camera.Size getBestPreviewSize(Camera.Parameters parameters, int w, int h) 
{ 
    Camera.Size result = null; 

    for (Camera.Size size : parameters.getSupportedPreviewSizes()) 
    { 
      if (size.width <= w && size.height <= h) 
      { 
       if (null == result) 
       result = size; 
      else 
      { 
       int resultDelta = w - result.width + h - result.height; 
      int newDelta = w - size.width + h - size.height; 

      if (newDelta < resultDelta) 
       result = size; 
      } 
      } 
    } 
return result; 
} 

除いて除去し、取るされています見て、彼らはプレビュー、キャプチャ、パフォーマンスなどに関していくつかの興味深いことを(ここには示されていません)行います。

+0

私はあなたのコードをテストする時間がまだありませんでしたが、私は "基本的なアンドロイドカメラの不具合"に興味があります。どこでもっと情報を得ることができますか? – fromvega

+0

@fromvega - 1つの場所はありませんが、最大ののはポートレートモードの問題(多くのデバイスで出力を歪ませる)です。プレビューフレームをYUVのみの形式にするものもあります。等 – Idistic

関連する問題