今天有点时间,就来聊一聊关键的技术点。

我以为主要的技术点,有两个:

一、如何按照用户的选择动态的描绘出头像。

大概很多人看到这个软件第一想法是:不就是几张图片层叠起来显示嘛。说实话我开始也是这么认为的,所以第一思路就是想方设法将图片层叠起来显示。但我几乎将android图片显示的各种方法都尝试了,依然不然层叠出像样的头像。

瞎搞了很多天,回过头研究了解压出来的代码残品,突然才醒悟,根本不是图片层叠嘛,这是画出来的。了解canvas的都知道,canvas支持按照指定的path描绘图形的操作。但问题是,如此复杂的图片,如何以path描述呢?有没有工具借助?这是我想到了以前接触的SVG。窃以为,SVG可以认为是标准化了的path。很多工具支持解析和生成SVG文件。于是问题豁然开朗。

那么SVG如何在android中解析呢?作为一个Java攻城狮的惯常思路是找开源。于是翻箱倒柜,终于找到一个非常轻量级的开源解析器,参考这个解析器,可以使用很少的代码解析大部分SVG格式文件。解析出SVG路径之后,就可以在canvas中描绘了。

二、如何快速低内存显示大量图片

这样一个apk,用到的图片之多,可能是大多数apk难以望其项背的,多达1000多张。而普通的Bitmap又非常耗费内存。如何尽量少占内存,快速显示是一个大问题。我上网找了很多乱七八糟的方法,实验证明,都没有效果。

经过实验,我总结了如下两个方面。首先要使用BitmapFactory.decodeStream解析图片文件,BitmapFactory.decodeStream直接使用本地方法解析图片文件,无疑会快很多。其次,对于一个120*120的1K文件来说,使用通常的方法解析,一个点要占8个字节,也就是120*120*8=115200,这无疑太大了。因此可以设置BitmapFactory.decodeStream的Options,将options.inPreferredConfig 设置为 Bitmap.Config.ALPHA_8,这样解析时一个字节只需要占用1个字节,这无疑大大减少了内存占用。

但对于1000多张这样大量的图片来说,还是占用内存不少。这就需要使用到LruCache啦。使用LruCache需要指定一个缓存阈值,LruCache会按照最近最少使用原则,在占用内存超过阀值后自动将最近最少使用的对象移除,从而减少内存占用。

先写这些,有时间再聊。

附上源码:http://download.csdn.net/detail/zhufengweihai/7929481

仅供参考复制借鉴剽窃,哈哈

做了一个仿脸萌的app,哈哈相关推荐

  1. 做了一个 仿qq的APP

    由本人 一人独自开发聊天仿qq工具 用的工具Visual Studio Code 前端 脚手架cli  (vue vuex vue-router)ui (MuseUI)  实现各个屏幕兼容(less ...

  2. 做了一个仿吃鸡游戏,可多人联网,算是学习总结。

    网上偶见UNITY,很有兴趣于是自学了一段时间,这是我做的一个仿吃鸡游戏DEMO,虽然只是抱着学习实践的很低要求,但从代码.模型.美工.场景都要自己做,繁杂超过了我的预估.对次时代游戏有兴趣可加我qq ...

  3. Delphi做的一个仿Web的导航界面

    完全原生开发,没有使用任何第三方组件,delphi 也是可以做出很精美的界面的. 使用Frame 来实现,实际上很多复杂的界面都可以使用Frame来组合设计,开发复杂界面必备的技术. DelphiWe ...

  4. APP Inventor,一个能快速做出app的工具。只要会C语言就行,很好的调试单片机工具。基于arduino的蓝牙数据传送在APP显示,室内花园的制作。

    今天记录一下前几天做的一个关于智能窗户APP的制作过程.这次制作是通过APP inventor来实现的下面是最原始的版本,虽然有点丑,但这都不是重点,以后有待改进. (1)APP初次打开的显示: 如图 ...

  5. java写脸萌_FaceLovely 本项目是一个仿安卓脸萌app应用的源码, 款非常有趣的拼脸软件,即使你不会画 android 259万源代码下载- www.pudn.com...

    文件名称: FaceLovely下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 6940 KB 上传时间: 2016-05-25 下载次数: 0 详细说明:本项 ...

  6. EonerCMS——做一个仿桌面系统的CMS(二)

    上一周我说到,我要开始做一个仿桌面系统的CMS.现在,一周过去了,来做个小小的总结吧,顺便把上一周片尾留的小问题解答下. 桌面 关于界面,思前想后,还是模仿115的了,说是模仿,其实几乎是照搬.因为我 ...

  7. 如何做一个跨平台的游戏App?

    如何做一个跨平台的游戏App? iOS和安卓系统上的应用程序,根据提供的内容不同,按照开发方式和用户体验不同,可区分为app和游戏: 首先从开发方式不同来说明,app开发一般是用操作系统官方提供的开发 ...

  8. 杀了一个程序员祭天换来今天的正常推送:仿知乎APP源码分享

    原创 2017-09-19 菜鸟君 菜鸟窝官网 ▲点击上方蓝色字体关注后免费领取"200套开源项目" 菜鸟窝技术文章编辑招募中,可免费学习优秀实战课程,有兴趣快加菜鸟君微信:kee ...

  9. 谈下最近做的一个手机app,学习到的东西挺多的哦

    最近,我做了一个头条的应用,感觉挺有成就的,不过,以我现在的能力,要开发一些大型的项目,还需要不断的学习和融入到团队才行哦,不然,以后真的是做不来哦. 手机编程的工作量也是很大的哦,不过,有思路之后, ...

最新文章

  1. 通过评估假设行为来学习人类目标
  2. QuartzCore框架-- iOS中的动画
  3. 基础知识--:before伪元素和:after伪元素
  4. Struts2数据传输的背后机制:ValueStack(值栈)
  5. Windows 10 周年更新正式版下载 + win10 快捷键
  6. python打出由边框包围的_python – 提取边框并将其保存为图像
  7. php数据库操作类的调用优化,PHP PDO优化数据库操作类 多数据库驱动类
  8. 家里蹲太孤单?用 Python 画一只单身狗 | 原力计划
  9. html5初始结构,分子动力学初始结构构建程序Packmol的使用
  10. 黑马程序员:java基础学习——数组
  11. 正则修饰符、用敏感词库替换
  12. 新东方王江涛十天背单词法(艾宾浩斯记忆曲线)(适用于各阶段各种记忆背诵类的知识点,许多人成功上岸)
  13. 在vue中简单使用Luckysheet
  14. 投影仪服务器响应失败,投影仪几种常见问题现象分析,投影仪故障问题
  15. IE首页被劫持,桌面图标异常的个人综合清理方法
  16. java 原子量_Java多线程-新特征-原子量
  17. 【机器学习笔记】【决策树】【分类树】
  18. js 周期性定时器
  19. Redis知识梳理(25)[ Redis 安全通讯 ]
  20. Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述

热门文章

  1. MSF编码+VS编译木马免杀
  2. python周期函数,Python函数的周期性执行实现方法
  3. 动态ip代理秘籍:隐藏ip的方法要得跟***学
  4. iOS导航栏颜色,任务栏颜色
  5. 程序员网页版工具集合
  6. 数据包络分析--SBM Model(第二篇)
  7. 如何开始自动化员工招聘的五个提示
  8. c# 小票机打印二维条码_C# winform 使用rdlc打印小票其中包含动态显示多条形码的解决方法...
  9. openlayer地图导出指定范围图片文件
  10. gif.GifImageView 动态加载gif图片不动