怎么在Android中通过自定义相机实现拍照功能

  介绍

这篇文章给大家介绍怎么在Android中通过自定义相机实现拍照功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

照相机类在5.0以后不推荐使用了,取而代之的是android.hardware.camera2包下的类,本文使用相机只

我们首先自定义一个观点去继承SurfaceView:

public  class  CameraSurfaceView  extends  SurfaceView  implements  SurfaceHolder.Callback, Camera.AutoFocusCallback  {   ,private  SurfaceHolder  mHolder;   ,private  Camera  mCamera;   ,private  static  final  int  ORIENTATION =, 90;   ,private  int  mScreenWidth;   ,private  int  mScreenHeight;   ,private  boolean  isOpen;      ,public  CameraSurfaceView (Context 上下文,AttributeSet  attrs), {   超级才能(上下文,attrs);   getScreenMatrix才能(上下文);   时间=mHolder 才能;getHolder ();   mHolder.addCallback才能(这个);   mHolder.setType才能(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);   ,}      ,private  void  getScreenMatrix (Context 上下文),{   WindowManager 才能;WM =, (WindowManager), context.getSystemService (Context.WINDOW_SERVICE);   DisplayMetrics 才能;outMetrics =, new  DisplayMetrics ();   WM.getDefaultDisplay才能().getMetrics (outMetrics);   时间=mScreenWidth 才能;outMetrics.widthPixels;   时间=mScreenHeight 才能;outMetrics.heightPixels;   ,}      ,public  void  takePicture (Camera.ShutterCallback  mShutterCallback, Camera.PictureCallback  rawPictureCallback,, Camera.PictureCallback  jpegPictureCallback), {   if 才能;(mCamera  !=, null)   ,,mCamera.takePicture (mShutterCallback, rawPictureCallback,, jpegPictureCallback);   ,}      ,public  void  startPreview (), {   mCamera.startPreview才能();   ,}      ,@Override   ,public  void  surfaceCreated (SurfaceHolder 持有人),{   if 才能;(! checkCameraHardware (getContext ()))   ,才能回报;   if 才能;(mCamera ==, null), {   ,,isOpen =, safeCameraOpen (Camera.CameraInfo.CAMERA_FACING_BACK);   ,,}   if 才能;(! isOpen), {   ,才能回报;   ,,}   mCamera.setDisplayOrientation才能(方向);   try {才能   ,,mCamera.setPreviewDisplay(持有人);      ,,},catch  (IOException  e), {   ,,e.printStackTrace ();   ,,}   ,}      ,@Override   ,public  void  surfaceChanged (SurfaceHolder 持有人,int 格式,int 宽度,,int 高度),{   if 才能;(mCamera  !=, null), {   ,,setCameraParams (mScreenWidth, mScreenHeight);   ,,mCamera.startPreview ();   ,,}   ,}      ,@Override   ,public  void  surfaceDestroyed (SurfaceHolder 持有人),{   releaseCameraAndPreview才能();   ,}      ,private  boolean  safeCameraOpen (int  id), {   boolean 才能;qOpened =,假;   try {才能   ,,releaseCameraAndPreview ();   ,,mCamera =, Camera.open (id);   ,,qOpened =, (mCamera  !=, null);   ,,},catch  (Exception  e), {   ,,e.printStackTrace ();   ,,}      return 才能;qOpened;   ,}      ,private  void  releaseCameraAndPreview (), {   if 才能;(mCamera  !=, null), {   ,,mCamera.stopPreview ();   ,,mCamera.release ();   ,,mCamera =,空;   ,,}   ,}      ,private  boolean  checkCameraHardware (Context 上下文),{   if 才能;(context.getPackageManager () .hasSystemFeature (PackageManager.FEATURE_CAMERA)), {   ,,return 真实;   ,,},{else    ,,return 假;   ,,}   ,}         ,@Override   ,public  void  onAutoFocus (boolean 成功,Camera 相机),{      ,}      ,private  void  setCameraParams (int 宽度,,int 高度),{   Camera.Parameters 才能;parameters =, mCamera.getParameters ();//,才能获取摄像头支持的PictureSize列表   List<才能;Camera.Size>, pictureSizeList =, parameters.getSupportedPictureSizes ();/* *才能从列表中选取合适的分辨率*/Camera.Size 才能;picSize =, getProperSize (pictureSizeList,,((浮动),height /,宽度));   if 才能;(null ==, picSize), {   ,,picSize =, parameters.getPictureSize ();   ,,}//才能,根据选出的PictureSize重新设置SurfaceView大小   float 才能;w =, picSize.width;   float 才能;h =, picSize.height;   parameters.setPictureSize才能(picSize.width, picSize.height);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Android中通过自定义相机实现拍照功能