Android Camera Filmstrip 小结

Camera模块较大,调用较复杂,如果想从一开始就想了解透彻,难度有点大。所以本人选择了一个切入口,研究在拍照后,界面右下方显示小图的功能着手,进而了解Camera模块的大框架,大的调用流程,处理方式。
1.通过查看layout 布局文件可知Camera 预览 拍照均是在一个Activity中CameraActivity里实现的。但布局上大的方面是是使用Framelayout
原因很简单,这样做可以实现控件 视图覆盖,能利用有限的空间,实现更多的用户操作。例如 视频 拍照切换,前后摄像头切换,
是否闪光,是否对焦,以及其他Camera参数的设置。
2.Camera 中几个常用的java文件必须要知道 CameraActivity PhotoUI PhotoModule PhotoControl 
下面开始对FilmStrip 中的功能进行说明
FileStrip 其实是在拍照后,右滑拍照界面,让它进入图片查看界面。通常只要存在拍照的图片均可进入,否则滑动无效果。
我只对当前拍照后出现的Tumbnail 小图片进行研究,其他不关注。
在第一次进入相机时,相机是处于预览界面的。此时未出现小图片。在拍照后图片立即显示,而且点击后马上进入FilmStrip 界面。
流程为:
在拍照时,回调onPictureTaken 在其处理的后期,也就是生成图片后,将图片保存,同时生成缩略小图,thumbnail 显示的就是小图
拍照是由于单击拍照按钮会调用到
PhoneModule中
onShutterButtonClick()
-->focusAndCapture();对焦与图片抓取
然后就会调用的FocusManager中的focusAndCapture
又会调用到PhoneMoudle中的 capture();
capture();
-->mCameraDevice.takePicture(mHandler,
                /**
                 * SPRD: fix bug462021 remove capture animation
                 * @{
                new ShutterCallback(!animateBefore),
                 */
                new ShutterCallback(false),
                /**
                 * @}
                 */
                mRawPictureCallback, mPostViewPictureCallback,
                new JpegPictureCallback(loc));
会使回调JpegPictureCallback 中的OnPictureTaken 
其中一些Camera状态的更新会导致CameraActivity 显示某些View 也就是FilmStripView RoundedThumbnailView 等
在onPictureTaken后期会保存图片,并再创建一个线程处理图片保存,小图片生成 ,Thumbnail 更新通知等
涉及到的java文件有:FilmstripView FilmstripLayout CameraAppUI PhotoUI FilmstripBottomPanel 
FilmstripContentPanel RoundedThumbnailView MainActivityLayout FocusOverlayManager AppController
Camera模块复杂的根本原因是因为Camera 无论是拍照还是录像,其中的步骤流程本来就多,涉及的参数也多。对焦 曝光 快门 分辨率 生成的文件保存
 几乎涉及到了多媒体的方方面面,而为了使代码有层次,利于后面的优化,扩展,增强复用性。又使用了MVP MVC等框架。同时Camera 模块本身又分为Client 
 Server 这样就使得Camera模块非常大。但正因如此,Camera中的许多客制化的功能我们都可以在源码基础上修改,优化,满足第三方需求。

 建议学习android 源码时碰到这种逻辑复杂 模块超大 代码使用的框架时,从一个小功能入手,逐步认识,了解它。如果一开始就想知道整个流程,就不大现实。

最后希望:在看Android源码的同仁们,继续努力。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值