本文介绍了Android开发实现摄像头功能的方法。分享给大家,供大家参考,详情如下:
分析:
1)判断是否有摄像头 checkCameraHardware(this)
2) 获取相机camera = www.sxzhongrui.com(0);
3) 添加相机 mPreView = new SurfacePreView(this,mCamera);
4)实现mCamera.autoFocus拍照
5)拍照后,使用mCamera.takePicture(null,null,mPicture);将图片保存到sd卡的方法
代码实现:
/** * 使用相机拍照 * @作者陈.lin * */ 公共类 CameraActivity 扩展 Activity { 私有相机 mCamera;//相机 private SurfacePreView mPreView;//视图 私有FrameLayout mFrameLayout; @覆盖 protected void onCreate(Bundle savingInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera_takephoto); mFrameLayout = (FrameLayout) findViewById(R.id.framelayout); 如果(检查相机硬件(这个)){ mCamera = getCamera(); mPreView = new SurfacePreView(this,mCamera); mFrameLayout.addView(mPreView); } } /** * 专注于拍照 * @参数视图 */公共无效拍照(查看视图){ mCamera.autoFocus(new AutoFocusCallback() { @覆盖 公共无效onAutoFocus(布尔成功,相机相机){ mCamera.takePicture(null,mPicture); } }); } /** * 拍摄后的图片保存 */ 私有 PictureCallback mPicture = new PictureCallback() { @覆盖 公共无效onPictureTaken(字节[]数据,相机相机){ 尝试 { 文件 file = new File("/sdcard/file/aa.jpg"); if (!file.exists()) { 文件.mkdirs(); } FileOutputStream fos = new FileOutputStream(文件); fos.write(数据); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }; /** * 判断相机是否存在 * @参数上下文 * @返回 */ 私人布尔检查相机硬件(上下文上下文){if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) { 返回真; } 返回假; } /** * 初始化相机 * @返回 */ 公共静态相机 getCamera(){ 相机camera = null; 尝试 { 相机 = www.sxzhongrui.com(0); } catch (异常 e) { e.printStackTrace(); } 返回相机; } /** * 实现拍摄视图 */ @SuppressWarnings(“弃用”) 私有类 SurfacePreView 扩展 SurfaceView 实现 SurfaceHolder.Callback{ 私人相机mCamera; 私人SurfaceHolder mHolder; 公共SurfacePreView(上下文上下文,相机相机){ 超级(上下文); mCamera = 相机; mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } @覆盖 公共无效surfaceCreated(SurfaceHolder持有者){ 尝试 { mCamera.setPreviewDisplay(mHolder); mCamera.startPreview();} catch (IOException e) { e.printStackTrace(); } } @覆盖 公共无效surfaceChanged(SurfaceHolder持有者,int格式,int宽度,int高度){ if (holder.getSurface() == null) { 返回; } 尝试 { mCamera.stopPreview(); mCamera.setPreviewDisplay(mHolder); mCamera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } @覆盖 公共无效surfaceDestroyed(SurfaceHolder持有者){ // mCamera = null; } } }
布局:
<线性布局 xmlns:android =“http://www.sxzhongrui.com/apk/res/android” 安卓:layout_width =“match_parent” 安卓:layout_height =“match_parent” android:orientation="垂直" > <框架布局 android:id="@+id/framelayout" 安卓:layout_width =“wrap_content” 安卓:layout_height =“0dp” 安卓:layout_weight =“1”> <按钮android:id="@+id/button1" 安卓:layout_width =“wrap_content” 安卓:layout_height =“wrap_content” android:onclick="拍照" android:text="照片"/>
对更多Android相关内容感兴趣的读者可以查看本站专题:《Android拍照与图片处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题
解决方法
汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》和《Android控件用法总结》希望这篇文章对大家Android编程有所帮助。
以上就是来客网为您收集的Android开发方法实现相机功能实例分析的全部内容。希望本文能够帮助您解决Android开发实现摄像头功能的方法实例分析中遇到的程序开发问题。
如果您觉得来客网的内容不错,欢迎您向您的程序员朋友推荐来客网。