2016-08-24 14 views

答えて

0

私に助けてカメラで撮影した画像品質を失うことなく、カメラのAPIのフルスクリーンテクスチャビューに(意図、カメラのみAPIを使用していない)と、ナビゲーション引き出しを使用したいですカメラAPIの使用に興味があり、カメラのような機能を有効にするには、まずプレビューを取得する必要があります。プレビューは、このような独自のカスタム実装を介して取得することができ、

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { 
private SurfaceHolder mHolder; 
private Camera mCamera; 
private static final String TAG = "CAMERA_PREVIEW"; 
private Camera.Size mPreviewSize; 
public boolean isSafeToTakePicture = false; 

public CameraPreview(Context context, Camera camera) { 
    super(context); 
    mCamera = camera; 

    // Install a SurfaceHolder.Callback so we get notified when the 
    // underlying surface is created and destroyed. 
    mHolder = getHolder(); 
    mHolder.addCallback(this); 
} 

public void surfaceCreated(SurfaceHolder holder) { 
    // The Surface has been created, now tell the camera where to draw the preview. 
    try { 
     mCamera.setPreviewDisplay(holder); 
     mCamera.startPreview(); 
    } catch (IOException e) { 
     Log.d(TAG, "Error setting camera preview: " + e.getMessage()); 
    } 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    // empty. Take care of releasing the Camera preview in your activity. 
} 

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
    // If your preview can change or rotate, take care of those events here. 
    // Make sure to stop the preview before resizing or reformatting it. 

    if (mHolder.getSurface() == null){ 
     // preview surface does not exist 
     return; 
    } 

    // stop preview before making changes 
    try { 
     mCamera.stopPreview(); 
     isSafeToTakePicture = false; 
    } catch (Exception e){ 
     // ignore: tried to stop a non-existent preview 
    } 

    // set preview size and make any resize, rotate or 
    // reformatting changes here 

    // start preview with new settings 
    try { 
     Camera.Parameters parameters = mCamera.getParameters(); 
     parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height); 

     mCamera.setParameters(parameters); 
     mCamera.setPreviewDisplay(mHolder); 
     mCamera.startPreview(); 
     isSafeToTakePicture = true; 

    } catch (Exception e){ 
     Log.d(TAG, "Error starting camera preview: " + e.getMessage()); 
    } 
} 

private Camera.Size getOptimalPreviewSize(List<Camera.Size> sizes, int w, int h) { 
    final double ASPECT_TOLERANCE = 0.1; 
    double targetRatio=(double)h/w; 

    if (sizes == null) return null; 

    Camera.Size optimalSize = null; 
    double minDiff = Double.MAX_VALUE; 

    int targetHeight = h; 

    for (Camera.Size size : sizes) { 
     double ratio = (double) size.width/size.height; 
     if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; 
     if (Math.abs(size.height - targetHeight) < minDiff) { 
      optimalSize = size; 
      minDiff = Math.abs(size.height - targetHeight); 
     } 
    } 

    if (optimalSize == null) { 
     minDiff = Double.MAX_VALUE; 
     for (Camera.Size size : sizes) { 
      if (Math.abs(size.height - targetHeight) < minDiff) { 
       optimalSize = size; 
       minDiff = Math.abs(size.height - targetHeight); 
      } 
     } 
    } 
    return optimalSize; 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    final int width = resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec); 
    final int height = resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec); 
    setMeasuredDimension(width, height); 

    if(mCamera != null) { 
     List<Camera.Size> mSupportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes(); 

     if (mSupportedPreviewSizes != null) { 
      mPreviewSize = getOptimalPreviewSize(mSupportedPreviewSizes, width, height); 
     } 
    } 
} 

}

このコードは、実際にあなたの画面サイズ、APIには、本質的に起こらない何かに合わせてプレビューをスケーリングします。

あなたがカメラを使用しているあなたの活動に

、あなただけ先に行くと、このようにプレビューを開始することができ、

Camera mCamera = getCameraInstance(); 

    // Create our Preview view and set it as the content of our activity. 
    mPreview = new CameraPreview(this, mCamera); 
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
    preview.addView(mPreview); 

プレビューを取得したら、あなたは画像をキャプチャするためにAPI機能を呼び出すことができます必要に応じてビデオを再生できます。

Thisでも、まずはデモをお試しください。

+0

Thanxx Aneebしかし、ナビゲーション引き出しについては、私はカメラをセットアップすることができますが、ナビゲーション引き出しはいくつかの問題を作り出しています.......それでも私を助けてください........... – Prashant

+0

この[here](http://www.androidhive.info/2015/04/android-getting-started-with-material-design/)は、材料のnav drawerを設定するためのまじめなチュートリアルです。見てください。 –

関連する問題