介绍
这篇文章给大家介绍怎么在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中通过自定义相机实现拍照功能