已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编程实现谷歌Android摄像头拍照【内容导航】 第1页:设定摄像头布局 第2页:摄像头实现代码 目前的智能手机拥有很多强大的功能,例如摄像头、GPS和无线上网等,现在是我们开始充分使用这些功能的时候了,在本篇文章中我们一起学习,如何在谷歌Android编程环境中,以最简单的方式实现谷歌Android摄像头拍照。在本文示例中,我们需要用到两个文件:布局文件和Activity文件。小提示数日前,Android 1.5(代号cupcake)新版发布,在安全方面有诸多改进,其中之一与摄像头权限控制有关。在此之前,你能够创建无需用户许可就可实现拍照的应用。现在该问题已被修复,如果你想在自己的应用中使用摄像头,需要在AndroidManifest.xml中增加以下代码:uses-permission android:name=android.permission.CAMERA/设定摄像头布局这是开发工作的基础,也就是说我们希望在应用程序中增加多少辅助性元素,如摄像头各种功能按钮等。在本文中我们采取最简方式,除了拍照外,没有多余摄像头功能。下面我们一起看一下本文示例将要用到的布局文件“camera_surface.xml”。LinearLayout xmlns:android=/apk/res/androidandroid:layout_width=fill_parent android:layout_height=fill_parent android:orientation=vertical SurfaceView android:id=+id/surface_camera android:layout_width=fill_parent android:layout_height=10dip android:layout_weight=1SurfaceViewLinearLayout小提示:记住不要在资源文件名称中使用大写字母,如果你把该文件命名为“CameraSurface.xml”,会给你带来不必要的麻烦。该布局非常简单,只有一个LinearLayout视图组,在它下面只有一个SurfaceView视图,也就是我们的摄像头屏幕。 page 【内容导航】 第1页:设定摄像头布局 第2页:摄像头实现代码 摄像头实现代码现在我们已经查看了摄像头的xml代码,下面再来看一下Android代码。让我们创建一个名为“CameraView”的Activity类,实现SurfaceHolder.Callback接口:public class CamaraView extends Activity implements SurfaceHolder.Callback接口SurfaceHolder.Callback被用来接收摄像头预览界面变化的信息。它实现了三个方法:surfaceChanged当预览界面的格式和大小发生改变时,该方法被调用。surfaceCreated初次实例化,预览界面被创建时,该方法被调用。surfaceDestroyed当预览界面被关闭时,该方法被调用。下面我们一起看一下在摄像头应用中如何使用这个接口,首先看一下在Activity类中的onCreate方法。super.onCreate(icicle);getWindow().setFormat(PixelFormat.TRANSLUCENT);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.camera);mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);mSurfaceHolder = mSurfaceView.getHolder();mSurfaceHolder.addCallback(this);mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);下面我们逐一对代码进行一下说明。getWindow().setFormat(PixelFormat.TRANSLUCENT);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);通过上述代码,我们告诉屏幕两点信息:1、摄像头预览界面将通过全屏显示,没有“标题(title)”2、屏幕格式为“半透明”。setContentView(R.layout.camera_surface );mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);在以上代码中,我们通过setContentView来设定Activity的布局为前面我们创建的camera_surface,并创建一个SurfaceView对象,从xml文件中获得它。mSurfaceHolder = mSurfaceView.getHolder();mSurfaceHolder.addCallback(this);mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);通过以上代码,我们从surfaceview中获得了holder,并增加callback功能到“this”。这意味着我们的操作(activity)将可以管理这个surfaceview。我们看一下callback功能时如何实现的:public void surfaceCreated(SurfaceHolder holder) mCamera = Camera.open();mCamera是“Camera”类的一个对象。在surfaceCreated方法中我们“打开”摄像头。这就是启动它的方式。public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) if (mPreviewRunning) mCamera.stopPreview();Camera.Parameters p = mCamera.getParameters();p.setPreviewSize(w, h);mCamera.setParameters(p);try mCamera.setPreviewDisplay(holder); catch (IOException e) e.printStackTrace();mCamera.startPreview();mPreviewRunning = true;该方法让摄像头做好拍照准备,设定它的参数,并开始在Android屏幕中启动预览画面。我使用了一个“semaphore”参数来防止冲突:当mPreviewRunning为true时,意味着摄像头处于激活状态,并未被关闭,因此我们可以使用它。public void surfaceDestroyed(SurfaceHolder holder) mCamera.stopPreview();mPreviewRunning = false;mCamera.release();通过这个方法,我们停止摄像头,并释放相关的资源。正如大家所看到的,我们在这儿设置mPreviewRunning为false,以此来防止在surfaceChanged方法中的冲突。原因何在?因为这意味着我们已经关闭了摄像头,而且我们不能再设置其参数或在摄像头中启动图像预览。最后我们看一下本例中最重要的方法:Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() public void onPictureTaken(byte imageData, Camera c) ;当拍照时,该方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025河南新乡市第四人民医院招聘护理和药剂师3人参考模拟试题及答案解析
- 2025年金华永康市西城街道办事处工作人员招聘1人备考题库附答案详解(b卷)
- 2025南平武夷矿产资源发展有限公司劳务派遣员工三次社会招聘10人备考考点试题及答案解析
- 2025陕西宝鸡市凤翔区招聘社区专职人员29人备考题库含答案详解(培优a卷)
- 2025山东济南新旧动能转换起步区社工招聘30人备考题库附答案详解(基础题)
- 抚州市数字经济投资集团有限公司高素质人才引培招聘补充考试笔试备考试题及答案解析
- 2025福建浦盛产业发展集团有限公司食品生产线招聘1人参考考点题库及答案解析
- 儿科专用应急物资储备与调配方案
- 2025年甘肃省白银市靖远县东升镇选聘专业化管理村文书备考题库附答案详解(精练)
- 2026福建省选调生选拔工作备考题库含答案详解(预热题)
- 贵州国企招聘:2025贵州凉都能源有限责任公司招聘10人备考题库完整答案详解
- 航空油料员岗位招聘考试试卷及答案
- 并购居间协议书范本
- 谢鸿飞民法典合同编课件
- Unit5Whatanadventure!StartingoutListening课件-高中英语外研版
- 2025国家外汇管理局中央外汇业务中心校园招聘笔试历年参考题库附带答案详解
- 2025吉林吉林市舒兰市总工会招聘工会社会工作者8人考试笔试参考题库附答案解析
- 第06讲阅读表达(复习讲义)
- 工业机器人离线编程与仿真【项目五 】教案
- 风光摄影讲座课件
- 冬季消防车行车安全培训课件
评论
0/150
提交评论