为了使代码简洁,对代码进行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);
//初始化SurfaceHolder
this.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.youkuaiyun.com/u/20110829/23/5a6dd78b-4696-4987-8090-0b45c95adaa7.html?81148 留在这里求解答
本文介绍了将Android Camera程序按照MVC模式改造的过程,探讨了SurfaceHolder在相机应用中的作用,并分析了如何实现连续拍照功能。在改造中,将界面元素声明和点击事件处理分离,同时参考了《Android开发应用实战详解》的例程,尝试拍照后显示照片并能继续拍摄。文章中详细解析了SurfaceHolder的生命周期方法,并贴出了相关代码,对于SurfaceHolder的使用和Camera的管理进行了深入讨论。
320

被折叠的 条评论
为什么被折叠?



