这里主要是针对android2.2的
首先,从manifest.xml出发。可以看到:
<activity android:name="com.android.ginwave.camera.Camera"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:screenOrientation="landscape"
android:clearTaskOnLaunch="true"
android:taskAffinity="android.task.camera">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
.
.
.
</activity>
则首先进入的activity是camera.java。
接着我们就主要分析camera这个类。
由于camera代码庞大,所以仅针对需要修改的地方进行分析。
1.如果想处理预览数据,则我们可以在camera中调用setPreviewCallback方法。实现重写onPreviewFrame的方法:
camera.setPreviewCallback(new PreviewCallback(){
public void onPreviewFrame(byte[] _data,Camera _camera){
//增加对数据的处理
}
});
2.拍照的时候,我们调用camera对象的takePicture方法,传递shutterCallback和pictureCallback 实现RAW和JPEG的编码图像。每个图像的回调函数都会得到一个以合适的格式表示图像的字节数组,并且shutter callback会在shutter关闭之后马上触发。
private void takePicture(){
camera.takePicture(shutterCallback,rawCallback,jepgCallback);
}
例如:
private final class ShutterCallback implements
android.hardware.Camera.ShutterCallback {
public void onShutter() {
mShutterCallbackTime = System.currentTimeMillis();
mShutterLag = mShutterCallbackTime - mCaptureStartTime;
Log.v(TAG, "mShutterLag = " + mShutterLag + "ms");
clearFocusState();
}
}
private final class RawPictureCallback implements PictureCallback {
public void onPictureTaken(byte[] rawData,
android.hardware.Camera camera) {// BY ABLE 数据
mRawPictureCallbackTime = System.currentTimeMillis();
Log.v(TAG, "mShutterToRawCallbackTime = "
+ (mRawPictureCallbackTime - mShutterCallbackTime) + "ms");
}
}
在private class ImageCapture内:
mCameraDevice.takePicture(mShutterCallback, mRawPictureCallback,
mPostViewPictureCallback, new JpegPictureCallback(loc));
基本对数据的处理,就是对预览图像和拍照图像的处理。接着介绍下界面的修改:
1.对于相机而言,主要的页面存在于camera.xml中。
这里面有个自定义的布局:PreviewFrameLayout。我们可以在com.android.camera包下找到PreviewFrameLayout.java。它是ViewGroup的扩展类。里面有个FrameLayout/SurfaceView/FocusRectangle,SurfaceView用于显示预览图像、FocusRectangle是用来显示聚焦到拍照完成的那个框框的。
可以在camera.xml中增加layout来显示自己需要的布局,但是相应地PreviewFrameLayout的布局大小要调整。(这里需要注意相机已经设定了程序是横屏执行的,并且屏蔽了转屏的事件),接着就是根据自己的需要来修改或者增加布局了,其中PreviewFrameLayout的位置主要是由
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {...}函数来控制。
2.对于相机右侧的popupwindow的弹出项,可以在array.xml中进行添加。它主要是个PreferenceGroup。点击popupwindow的选项后,在HeadUpDisplay的90行中onSharedPreferencesChanged()->camera:2222->2169->2191->1972->1950->1818.也就是说我们要想对点击事件进行处理只需要对函数updateCameraParametersPreference()进行修改,当然针对改变的CameraSetting我们也要进行修改。
分享到:
相关推荐
Android Camera源码分析可以帮助开发者深入理解如何高效、稳定地实现相机功能,以及如何解决常见问题。在这个项目中,开发者已经修改了包名,使得代码可以直接运行,避免了常见的运行时错误,确保了可用性。 ...
自己总结的Android Camera系统架构及源码分析,以framework和hal为主。
本教程将深入探讨如何使用Camera2 API创建一个自定义相机应用,通过分析提供的OneSelfCamera源码,我们可以学习到以下几个关键知识点: 1. **Camera2 API基础**:Camera2 API取代了旧版的Camera API,提供了更多的...
Android Camera系统架构源码分析 Android Camera系统架构源码分析是Android系统中Camera模块的核心组件之一,负责摄像头的图像捕获、处理和存储。下面我们将对Android Camera系统架构源码进行分析,了解其内部机制...
建筑工地扬尘治理与文明施工检查表.docx
基于java的个性化旅游攻略定制系统设计与实现.docx
数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 导弹追击模型的建立与求解 共6页.pdf
基础课程辅助教学-JAVA-基于springBoot程序设计基础课程辅助教学系统设计与实现
适用人群:大学生 自学者 使用场景:大学生毕设 自学者练手项目 学习与交流 其它说明:部分资源来源网络及开源社区、仅供参考与学习、不可商用、若有侵权请联系删除! 内容概要:用springmvc实现的校园选课管理系统
java课程期末考试
C++ Vigenère 密码(解密代码)
工程研究中心申报基本情况一览表.docx
Vigenère 密码(加密代码)
密码学AES算法源代码,密码学实验
基于java的百货中心供应链管理系统设计与实现.docx
环境说明:开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器。 项目均可完美运行
【资源说明】 大数据毕业设计 基于Python+Spark机器学习天气预测系统详细文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
购物系统 微信小程序+PHP毕业设计 源码+数据库+论文+启动教程
BIM 人才培养的框架和方法 相关的标准
源项目文件