- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android中的缩略图加载文档
1. Why,为什么要加载缩略图?
有的时候不需要展示原图,只需展示图片的缩略图,可以节省内存。比如:网易新闻中的图片浏览,左边展示的小狮子图片就是一个缩略图,点击这个图片,才会展示原图。
?
2. How,怎么做呢?
/training/displaying-bitmaps/load-bitmap.html给出了一个方法,可以加载一个图片的缩略图。BitmapFactory#decodeFile (String pathName, BitmapFactory.Options opts),opts可以指定inJustDecodeBounds和inSampleSize两个参数。当指定inJustDecodeBounds时候,只解析图片的长度和宽度,不载入图片。当指定inSampleSize的时候,会根据inSampleSize载入一个缩略图。 比如inSampleSize=4,载入的缩略图是原图大小的1/4。要设置inSampleSize是多少呢?假设原图是1500x700的,我们给缩略图留出的空间是100x100的。那么inSampleSize=min(1500/100, 700/100)=7。我们可以得到的缩略图是原图的1/7。这里如果你要问15:7的图片怎么显示到1:1的区域内,请去看ImageView的scaleType属性。但是事实没有那么完美,虽然设置了inSampleSize=7,但是得到的缩略图却是原图的1/4,原因是inSampleSize只能是2的整数次幂,如果不是的话,向下取得最大的2的整数次幂,7向下寻找2的整数次幂,就是4。怎么才能不浪费内存呢?大熊同学找到一个方法:Bitmap#createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter),该方法可以将一个Bitmap生成指定大小的BItmap,该方法可以放大图片也可以缩小图片。
最终缩略图加载过程:
1. 使用inJustDecodeBounds,读bitmap的长和宽。2. 根据bitmap的长款和目标缩略图的长和宽,计算出inSampleSize的大小。3. 使用inSampleSize,载入一个大一点的缩略图A4. 使用createScaseBitmap,将缩略图A,生成我们需要的缩略图B。5. 回收缩略图A。
?
3. Notice,需要注意的事情
?
createScaseBitmap如果原图和目标缩略图大小一致,那么不会生成一个新的bitmap直接返回bitmap,因此,回收的时候,要判断缩略图A是否就是缩略图B,如果说是的话,不要回收。
4. 代码
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 /**
?* /training/displaying-bitmaps/load-bitmap.html
?*/
public?class?BitmapUtils {
????private?static?int?calculateInSampleSize(BitmapFactory.Options options,
????????????int?reqWidth, int?reqHeight) {
????????final?int?height = options.outHeight;
????????final?int?width = options.outWidth;
????????int?inSampleSize = 1;
????????if?(height reqHeight || width reqWidth) {
????????????final?int?halfHeight = height / 2;
????????????final?int?halfWidth = width / 2;
????????????while?((halfHeight / inSampleSize) reqHeight
???????????????????? (halfWidth / inSampleSize) reqWidth) {
????????????????inSampleSize *= 2;
????????????}
????????}
????????return?inSampleSize;
????}
?
????// 如果是放大图片,fi
您可能关注的文档
最近下载
- 出师表格理解性默写.doc VIP
- 电力用直流电源系统蓄电池组远程核容典型接线图、自动核容报告、双向DCDC装置、换流器技术要求.docx VIP
- 路面铣刨摊铺施工方案.pdf VIP
- 首届档案职业技能竞赛考试题库(含答案).docx VIP
- 建筑工程施工技术课件.ppt VIP
- 医院智慧服务分级评估二级实证材料通用模板(选择项部分)(2024版) .doc VIP
- 黑色冶金行业标准YB/T4001.1-2007(钢格栅板).docx VIP
- 旅游景区开发运营项目指标评估报告.docx VIP
- 2024北京市密云区辅警考试真题及答案.docx VIP
- 高速公路服务设施设计规范-2016-7-26标准.pdf VIP
文档评论(0)