2016-04-27 19 views
1

Androidサーフェイスのカメラのプレビューを表示するクラスを作成しようとしています。私は次のコードを試しました。しかし、プレビューは表示されません。私はパラメータを変更しようとしましたが、運はありませんでした。私はlogcatを通過しました。何も表示されず、エラーも警告も表示されません。黒い画面のみが表示されます。アプリはクラッシュしません。Androidカメラの画像プレビューが正しくありません

public class Preview extends SurfaceView implements SurfaceHolder.Callback { 
private SurfaceHolder holder; 
private Camera camera; 

public Preview(Context context, Camera camera) { 
    super(context); 
    this.camera = camera; 
    holder = getHolder(); 
    holder.addCallback(this); 
    holder.setFixedSize(50, 50); 
} 
public void surfaceCreated(SurfaceHolder holder) { 

    try { 
     camera.setPreviewDisplay(holder); 
     camera.startPreview(); 
    } catch (IOException e) { 
     Log.d("error", "Can't set camera preview: " + e.getMessage()); 
    } 

} 

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

    if (this.holder.getSurface() == null) { 
     return; 
    } 
    try { 
     camera.stopPreview(); 
    } catch (Exception e) { 
    } 
    try { 
     camera.setPreviewDisplay(this.holder); 
     camera.startPreview(); 
    } catch (Exception e) { 
     Log.d("DG_DEBUG", "Error starting camera preview: " + e.getMessage()); 
    } 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 

} 

} 

答えて

0

ここでは、ホルダーの種類は含まれていないようです。タイプをSURFACE_TYPE_PUSH_BUFFERSに設定する必要があります。だからあなたのコンストラクタは、私はコードを試してみました

public Preview(Context context, Camera camera) { 
    super(context); 
    this.camera = camera; 
    holder = getHolder(); 
    holder.addCallback(this); 
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    holder.setFixedSize(50, 50); 
} 

以下のようにする必要があり、コールバック

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

を追加した後、線の下に使用してください。それは今、完璧に動作します。