在Android上山寨了一个Ios9的LivePhotos,放Github上了

简介:

9月10号的凌晨上演了一场IT界的春晚,相信很多果粉(恩,如果你指坚果,那我也没办法了,是在下输了)都熬夜看了吧,看完打算去医院割肾了吧。在发布会上发布了游戏机 Apple TV,更大的砧板 Ipad Pro ,鼠标右键 3D Touch,筷子 Apple Pencil,大妈金的肾6s和肾6sp,等等,当然还有LivePhotos。

先看看IOS的LivePhotos

“我要给你拍照了,别站着不动。”“你说啥?”“我在给你拍照,走两步!”

LivePhotos ——Twitter. not Jony Ive

这个是视频,优酷上的。

LivePhotos就是把你拍照前1.5s和拍照后的1.5s都记录下来了,而且!!而且是1200像素的图片啊!!不是视频不是gif啊!

所以内存变成2GB了?网上说照片的大小只是以前的2倍。网上还说肾6s和肾6sp才支持拍摄,之前的肾都不支持,只支持查看。

更多的我就不知道了,只有等到25号发布了再看看别人发的测评文章了。

再看看Android上山寨的LivePhotos

在第一张gif的计数显示到3到4的时候点击了拍照。程序中是记录了前后3s共计6s的时间。

github上的地址:https://github.com/yydcdut/LivePhotos-android

现在的设计思路(3s内的照片)

  1. 计算出大概的平均每帧间隔时间,new一个可以缓存1.5s内帧数据的队列;
  2. 获取Camera的帧数据(YUV格式),加入缓存队列,如果队列满了,弹出第一个,再把最新的加到最后;
  3. 如果点击拍照了,new一个可以缓存3s帧数据的队列,将之前的1.5s数据加到这个队列中,再缓存拍照后1.5s的数据(但是这样可能会OOM,有待改善);
  4. 将3s的数据写到数据库中,新开启一个服务进程将这3s数据读取出来解码成JPG图片写到SDCard中;
  5. 获取中间那张图片,做成一张高斯模糊的照片;
  6. 当展示Live Photo的时候,自定义一个类,初始化前5张照片(这个5张可自定义数量),当显示第一张的时候去解析第六张图片,当显示第二张的时候去解析第七张图片,一次类推;

踩过的巨坑

  1. 当时担心OOM就将每帧数据一获取到缓存下来然后马上写到数据库中,然后当点击拍照的时候记录时间,之后去数据库中获取数据做图,但是到后面数据库超级大,而且队里里面还缓存了很多;
  2. 为了结局数据库大的问题,改为当数据库中存的有3s时间内的帧数据的时候就写一条数据然后删一条数据,发现超级慢,缓存队列大到爆;
  3. 展示Live Photo的时候以为应该不会出现OOM,就用的帧动画AnimationDrawable,结果小内存的手机就OOM,大内存的没有。

还没做完,还要做的

  1. 当API小于14的时候就使用SurfaceView + Camera的onPreviewFrame()回调(现在还只做了这个,注意有坑)!
  2. 当API < 20 && API >= 14的时候使用TextureView + Camera来显示预览,获取每帧的bitmap。
  3. 当API >= 20的时候使用TextureView + Camera2来显示预览,这样可以将图片的分辨率变大。
  4. 试试前置摄像头的LivePhotos功能。
  5. 声音!!!

这篇文章还没完

好吧,东西还没做完,但是觉得在Android还是有一定的可行性的。

这篇博客会时常更新,这里就是华丽的分割线。

博客地址:http://www.cnblogs.com/yydcdut/p/4813406.html

Github地址:https://github.com/yydcdut/LivePhotos-android

华丽的分割线

--------- 9.22 更 -----------
完成了4.X上的获取帧数据,但是还没有结局获取帧数据卡顿的情况,第二是获取到的是bitmap,但是要转成byte[],这一部分速率问题等。
发现一个bug,在bugme的系统上,在2.x的activity上能正常开启Service,而在4.x的activity上却不行。。

我是天王盖地虎的分割线




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/4813406.html,如需转载请自行联系原作者

相关文章
|
8天前
|
安全 Android开发 iOS开发
深入探索Android与iOS的差异:从系统架构到用户体验
在当今的智能手机市场中,Android和iOS无疑是最受欢迎的两大操作系统。本文旨在探讨这两个平台之间的主要差异,包括它们的系统架构、开发环境、安全性、以及用户体验等方面。通过对比分析,我们可以更好地理解为何不同的用户群体可能会偏好其中一个平台,以及这些偏好背后的技术原因。
|
15天前
|
存储 安全 Android开发
探索Android与iOS的隐私保护机制
在数字化时代,移动设备已成为我们生活的一部分,而隐私安全是用户最为关注的问题之一。本文将深入探讨Android和iOS两大主流操作系统在隐私保护方面的策略和实现方式,分析它们各自的优势和不足,以及如何更好地保护用户的隐私。
|
15天前
|
安全 数据安全/隐私保护 Android开发
探索Android与iOS的隐私保护策略
在数字时代,智能手机已成为我们生活中不可或缺的一部分,而随之而来的则是对个人隐私和数据安全的日益关注。本文将深入探讨Android与iOS两大操作系统在隐私保护方面的策略和实践,分析它们如何应对日益严峻的隐私挑战,以及用户应如何保护自己的数据安全。通过对比分析,我们将揭示两大系统在隐私保护方面的优势和不足,为用户提供有价值的见解和建议。
|
15天前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
9天前
|
安全 定位技术 Android开发
深入探索Android与iOS操作系统的安全性差异
【10月更文挑战第21天】 在当今数字化时代,智能手机已成为我们生活中不可或缺的一部分。其中,Android和iOS作为两大主流操作系统,各自拥有庞大的用户群体。然而,它们在安全性方面的表现却大相径庭。本文将深入探讨Android与iOS在安全机制、隐私保护以及应对恶意软件方面的差异,帮助读者更全面地了解这两个平台的安全特性。
|
16天前
|
前端开发 Android开发 开发者
探索Android与iOS的跨平台开发策略
在当今多元化的移动设备市场中,开发者面临着为不同操作系统设计应用的挑战。本文深入探讨了Android和iOS两大主流平台的跨平台开发策略。我们将分析使用Flutter、React Native等框架进行跨平台开发的优劣,并讨论如何克服各平台间的差异性,以实现高效、一致的用户体验。此外,文章还将提供一些实用的技巧和最佳实践,帮助开发者优化跨平台应用的性能和兼容性。
33 4
|
18天前
|
安全 Android开发 iOS开发
深入探讨Android与iOS操作系统的差异性
本文旨在通过对比分析Android和iOS两大主流移动操作系统,揭示它们在设计理念、用户体验、安全性、应用生态及系统更新等方面的根本差异。不同于传统的功能列表式摘要,本摘要强调了两大系统背后的哲学思想及其对用户日常使用的实际影响,为读者提供了一个宏观且深入的视角来理解这两种操作系统的独特之处。
|
17天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
17天前
|
存储 安全 数据安全/隐私保护
深入探索Android与iOS的隐私保护机制:一场没有硝烟的较量####
本文深度剖析了Android与iOS两大移动操作系统在用户隐私保护方面的策略与实践,揭示两者在设计理念、技术实现及用户体验上的异同。通过对比分析,旨在为读者提供一个全面而深入的视角,理解两大平台如何在保障用户隐私的同时,实现功能的丰富与便捷。本文不涉及具体产品推荐或品牌偏好,仅从技术角度出发,探讨隐私保护的现状与挑战。 ####
|
17天前
|
前端开发 Android开发 iOS开发
探索Android与iOS的跨平台开发策略
在移动应用开发的多元化时代,跨平台开发已成为开发者追求效率和广泛覆盖的重要手段。本文深入探讨了Android与iOS两大主流平台下的跨平台开发策略,分析了各自的优势与挑战,并通过实际案例展示了如何有效实施跨平台解决方案,以期为开发者提供有价值的参考和启示。