菜鸟笔记3——Android Camera程序扩充(1) SurfaceHolder问题
来源:互联网 发布:淘宝查号是什么意思 编辑:程序博客网 时间:2024/04/26 21:59
为了使代码简洁,对代码进行MVC模式的改造,即分离model,view,control.代码暂时不贴,大概就是把所有界面元件的宣告都写到findViews()里,所有View被Click后的执行动作都放到setListener()里。
另外,为了使IsiCamera1Activity类里的核心方法onCreate尽量短,把能‘外包’的代码都用private method提取出去。否则onCreate函数会变得奇长无比并几乎无法阅读(满眼都是注释的感觉太糟了)
在改造过程中我参考了《Android开发应用实战详解》里的Camera例程,希望实现里面的拍完一张以后,照下来的照片停留片刻,又能接着拍下一张。他采取的做法是拍照->储存->释放Camera camera->再次实例化camera(代码如下)
camera=Camera.open();//但是在google tutorial给的代码里,Camera.open()方法写了,但是找不到在哪里调用过!放在这里备案以免忘记。
在google给的程序里 camera = Camera.open()出现在了interface SurfaceHolder.Callback的abstract void surfaceCreated()里面,代码如下:
@Override public void surfaceCreated(SurfaceHolder holder) { try{ //Open the Camera in preview mode this.camera = Camera.open(); this.camera.setPreviewDisplay(this.holder); }catch(IOException ioe) { ioe.printStackTrace(System.out);} }
我猜想,仅仅是猜想,SurfaceHolder holder这个东西有着神奇的作用,他使得SurfaceView一旦实例化新对象,就会调用surfaceCreated方法,不用另写一句mCameraSurfaceView.surfaceCreated();
holder这个词在googleAPI手册上多次见到,不知道什么意思。thinking in java书里搜索过也没有,留在这里备忘。
更新:对SurfaceHolder holder的理解已解决:
先来看看代码:
private class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback {private SurfaceHolder mSurfaceHolder;private Camera camera = null;//该类的构造函数public CameraSurfaceView(Context context) {super(context);//初始化SurfaceHolderthis.mSurfaceHolder = this.getHolder();//mSurfaceView.getHolder()? how does it know?this.mSurfaceHolder.addCallback(this);this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//设置SurfaceHolder类型}
我们来看mSurfaceHolder这个object是怎么实例化的:
this.mSurfaceHolder = this.getHolder();
getHolder的返回值又是什么呢?google给出的解释是:
考虑到mSurfaceHolder被作为参数传递到了surfaceCreated,surfaceChanged等方法里,我可以说这里的underlying surface是'当前surface'的意思,而不是什么'下面的surface'.
于是,mSurfaceHolder就成为了:access and control over the underlying surface
现在可以考虑mSurfaceHolder在surfaceCreated()方法里承担什么作用了:
surfaceCreated的google解释:
在哪个surface创建时被call呢?holder指向的surface.
done.
'外包'遇到问题了,详见论坛帖:http://topic.csdn.net/u/20110829/23/5a6dd78b-4696-4987-8090-0b45c95adaa7.html?81148 留在这里求解答
- 菜鸟笔记3——Android Camera程序扩充(1) SurfaceHolder问题
- 菜鸟笔记6——Camera改装,去掉内含类,重构程序。扩充暂停。
- 菜鸟笔记8——Camera程序扩充(4),按下Home,Back键的处理
- 菜鸟笔记5——Camera扩充(3) 界面更改,弹出对话框
- 菜鸟笔记4——Camera扩充(2) 拍完一张拍下一张的实现
- 菜鸟笔记9——Camera扩充(5),保存图片至sdcard的实现
- 菜鸟笔记2——Android Camera调用
- android学习笔记之SurfaceView,SurfaceHolder,SurfaceHolder.CallBack.
- camera SurfaceView SurfaceHolder开发所遇见的问题
- Android笔记:SurfaceView与SurfaceHolder对象
- Android笔记:SurfaceView与SurfaceHolder对象
- Android笔记:SurfaceView与SurfaceHolder对象
- Android之——Surface、SurfaceView与SurfaceHolder.Callback初探
- Android之——Surface、SurfaceView与SurfaceHolder.Callback初探
- Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系 && camera的takePicture实例
- Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系 && camera的takePicture实例
- Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系 && camera的takePicture实例
- android从应用到驱动之—camera(1)---程序调用流程
- 线性拟合(最小二乘法)
- 《大话处理器》连载——微架构(21) 指令并行的“绿营”和“蓝营”
- 使用正则表达式验证字符串格式之Pattern&Matcher
- android 增加wifi-p2p api 第三版
- Android应用程序签名详解
- 菜鸟笔记3——Android Camera程序扩充(1) SurfaceHolder问题
- VIM命令一览: VIM学习札记
- Oracle 11G在用EXP 导出时,空表不能导出解决
- yum -y install mysql mysql-server
- 关于ksoap连接webService的问题
- MySQL - 用户及权限管理
- 马云创造阿里巴巴帝国秘诀
- Use custom widgets with Qt Designer: Promotion technique
- Linux Kernel系列三:Kernel编译和链接中的linker script语法详解