




已阅读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安徽阳光采购服务平台有限责任公司社会招聘1人(第二次)考前自测高频考点模拟试题完整参考答案详解
- 2025湖北荆州市石首市面向城市社区党组织书记专项招聘事业岗位人员5人模拟试卷及完整答案详解一套
- 2025江西数字文化产业有限公司诚聘数字技术部智能化工程师1人模拟试卷及答案详解(名校卷)
- 2025福建新华发行(集团)有限责任公司漳州辖区分公司招聘考前自测高频考点模拟试题及完整答案详解
- 2025江西上饶市广信区公安局招聘编制外聘用人员25人模拟试卷带答案详解
- 2025年春季北燃实业集团校园招聘考前自测高频考点模拟试题及参考答案详解
- 2025年扬中市市级机关公开遴选考试真题
- 2025年核工业四一七医院招聘(22人)考前自测高频考点模拟试题及答案详解(夺冠)
- 2025年哈尔滨道里区工程社区卫生服务中心招聘若干名考前自测高频考点模拟试题及答案详解(全优)
- 2025福建泉州市洛江区公办学校专项招聘编制内新任教师9人(二)模拟试卷及1套完整答案详解
- 资阳产业投资集团有限公司第三轮一般员工市场化招聘笔试参考题库附答案解析
- 宣威课件教学课件
- 2025年淮南市大通区和寿县经开区公开招聘社区“两委”后备干部30名笔试备考题库及答案解析
- 人教版2024年新版七年级上册英语Starter Units 1-3综合测试卷(含答案)
- JJG 693-2011可燃气体检测报警器
- 苏教版数学四年级上册《解决问题的策略》课件
- LY/T 1571-2000国有林区营造林检查验收规则
- 内分泌和代谢疾病总论课件
- 教科版四年级(上)科学1.1听听声音课课练习题(含答案)
- 原子物理学:第2章 第5节 索末菲理论
- 金刚经讲义江味农居士遗著
评论
0/150
提交评论