做了一个仿脸萌的app,哈哈

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

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

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

大概很多人看到这个软件第一想法是:不就是几张图片层叠起来显示嘛。说实话我开始也是这么认为的,所以第一思路就是想方设法将图片层叠起来显示。但我几乎将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

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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值