这是好久前写的项目,但一直没有去总结。刚好在准备找工作这段时间来总结自己做过的东西,学到的东西。

写Android的自定义的相机应用时,首先要知道一些Camera开发必须知道的尺寸,不然在调试的时候,真的是会崩溃的。写自定义的Camera项目,一定要知道三个尺寸:

  1. SufaceView尺寸,SufaceView是用来预览摄像头捕捉到的画面的,当它全屏时就是手机屏幕的大小;
  2. Picturessize尺寸,Picturessize就是拍照后得到的照片的尺寸;
  3. Previewsize尺寸,这是预览时帧数据的尺寸;

这三个尺寸的比例不一致会导致出现三种画面的变形:

  1. 预览画面的物体的长宽比例失真;这是由于SufaceView与Previewsize的长宽比例不一致导致的,因为摄像头在显示时会将预览帧数据缩放为SufaceView的大小,因此这两者的长宽比例不一致会导致预览的物体失真;
  2. 拍照后,得到的照片里的物体变形失真;
  3. 在点击拍照按钮的瞬间,预览画面突然变形,然后又恢复到正常的情况;

第2种和第3种变形都是由于Picturessize和Previewsize的长宽比例不一致导致的,因此,为了保证通过自定义的相机得到的照片不失真变形,我们只要保证这三个尺寸的长宽比例一致;

在Camera开发的过程中,遇到要将两个SufaceView重叠放在一起的情况,一个SurfaceView用来预览画面,另外一个用来预览拍照后得到的照片,这时就会遇到上层的SufaceView被下层的SurfaceView遮挡的情况,这个时候就需要使用setZOrderonTop(true)或者setZOrderMediaOverlay(true)来控制SurfaceView的显示层次。

  • setZOrderonTop(boolean)控制这个SurfaceView是否放在窗口顶层。通常为了使它与绘图树整合,它会放在窗口之后。而通过这个函数可以使它放在窗口顶层,这意味着它所在窗口的其他内容变成不可见(可以设置SurfaceView透明来使其他内容可见)。这个函数必须在窗口添加到窗口管理器之前调用,调用这个函数会使之前调用的setZOrderMediaOverlay(boolean)无效。
  • setZOrderMediaOverlay(boolean)控制这个SurfaceView是否放在另一个普通的SurfaceView上面(仍然在窗口之上),通常用来覆盖在一个多媒体层上面。

最新文章

  1. UITableView(一)
  2. java抓取快递信息
  3. hdu杭电1671 / poj3630 字典树
  4. POJ1089 Intervals
  5. WPF中model属性即时改变
  6. js 神代码
  7. 阿里云利用web直传文件到oss服务器
  8. 关于在DWZ使用ssh后台查询的几种方式
  9. vue-cli 使用小技巧
  10. Python中的短路计算
  11. vue项目知识点总结
  12. Git的搭建
  13. PAT 1065 A+B and C (64bit)
  14. js执行上下文
  15. iOS开发 -------- UITableView的编辑
  16. [Leetcode 104]求二叉树的深度Depth of BinaryTree
  17. 关于”nodejs基于事件驱动”的思考
  18. linux常用命令:telnet 命令
  19. Android-DateUtil工具类
  20. 58、synchronized同步方法

热门文章

  1. 数组Arrays
  2. 在不同的pyhon版本中切换
  3. CookContainer 序列化保存
  4. windows查看占用端口的进程
  5. Visual Studio的调试技巧
  6. 对二进制加密(分散保存-s=sy+a+b)
  7. ReSharper 配置及用法(转)
  8. html、css杂记
  9. 使用cachemanager做缓存(Session的缓存)
  10. html5手机常见问题与工具分享