Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】

Android在加载或者处理超大巨型图片(x MB量级起步的图片)是一件非常需要小心谨慎的活儿,除了常规的OOM,其他需要处理的细节地方还很多,幸好开源社区github贡献了一套神器:SubsamplingScaleImageView(subsampling-scale-image-view),提供了一揽子完善的Android超大巨图的解决处理方案,为开发者解决处理加载超大巨型图的燃眉之急。
SubsamplingScaleImageView(subsampling-scale-image-view)其在github上的项目主页:
https://github.com/davemorrissey/subsampling-scale-image-view

需要注意的是,subsampling-scale-image-view在其项目代码中又引用了github上的另外一个开源项目:RapidDecoder,RapidDecoder在github上的项目主页是:
https://github.com/suckgamony/RapidDecoder

开发者在自己的项目中使用SubsamplingScaleImageView(subsampling-scale-image-view)库的时候,还还需要再把RapidDecoder导入。简单期间,可以将RapidDecoder的链接路径https://github.com/suckgamony/RapidDecoder/tree/master/library/src/main/java
目录下全部源代码复制到SubsamplingScaleImageView(subsampling-scale-image-view)代码包里面即可。
接下来开始使用SubsamplingScaleImageView(subsampling-scale-image-view)。
以加载一个超大、超高清分辨率的中国地图china.jpg为例(像素分辨率5484 * 4066,大小计5.04MB)。
步骤:
(1) 将china.jpg放置在工程的assets目录下。
(2) 用subsampling-scale-image-view自身提供的ImageSource.asset读取该china.jpg。
(3) 然后将其作为数据源载入SubsamplingScaleImageView。
代码,测试的主Activity MainActivity.java:

  1. package zhangphil.demo;
  2.  
  3. import com.davemorrissey.labs.subscaleview.ImageSource;
  4. import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
  5.  
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8.  
  9. public class MainActivity extends Activity {
  10.  
  11. private SubsamplingScaleImageView mSubsamplingScaleImageView;
  12.  
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17.  
  18. mSubsamplingScaleImageView=(SubsamplingScaleImageView) findViewById(R.id.subsamplingScaleImageView);
  19. mSubsamplingScaleImageView.setImage(ImageSource.asset("china.jpg"));
  20. }
  21. }

MainActivity.java需要的布局文件activity_main.xml,很简单,只有一个SubsamplingScaleImageView:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/subsamplingScaleImageView"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent" />

像通常一个超大巨图需要的随手指拖曳查看浏览、双击放大或缩小等常规图片浏览需要的功能,SubsamplingScaleImageView本身已经自带,开发者无需重复写代码完成。

Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】的更多相关文章

  1. android加载更多的图片

    这是昨天改进后的,我测试了下,可以加载图片到5万张,估计5万以上也是没问题的,我只试到5万,其实也没必要这么高,现实中1000左右就差不多了,不过我的应用到100就差不多了, package com. ...

  2. Android加载图片OOM错误解决方式

    前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...

  3. Android开发技巧——TextView加载HTML的图片及代码显示问题

    前几天在做一个Gradle用户指南的应用程序,使用的是TextView来加载HTML内容(至于为什么不用WebView,我也没有认真使用并比较过,也许以后会换吧),其中遇见了一些纠结的问题,所幸主要的 ...

  4. Android加载图片的策略

    实现图片缓存也不难,需要有相应的cache策略.这里我采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且 ...

  5. android加载gif图片

    Android加载GIF图片的两种方式 方式一:使用第三开源框架直接在布局文件中加载gif 1.在工程的build.gradle中添加如下 buildscript { repositories { m ...

  6. Android -- 加载大图片的方法

    在android中要加载一张大图片到内存中如果通过如下方式进行: Bitmap bitmap= BitmapFactory.decodeFile("/sdcard/a.jpg"); ...

  7. android 加载图片框架--Glide使用详解

    一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所 ...

  8. Android学习笔记_51_转android 加载大图片防止内存溢出

    首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...

  9. android加载大图,防止oom

    高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...

随机推荐

  1. 黑科技:CSS定制多行省略

    转载请注明出处:http://hai.li/2017/03/08/css-multiline-overflow-ellipsis.html 什么是多行省略? 当字数多到一定程度就显示省略号点点点.最初 ...

  2. Python之Django-part 1

    python manage.py syncdb 在django1.7已经被取代了:用python manage.py migrate 代替来移动库:   删除.卸载django 在cd /usr/lo ...

  3. WCF中常用的binding方式 z

    WCF中常用的binding方式: BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务.用于兼容旧的Web ASMX 服务. WSHttpBinding: 比 Bas ...

  4. 和菜鸟们一起攻克金盾2018SS加密视频

    今天刚拿到金盾2018SS加密的视频,界面如下:<ignore_js_op> 机器码由源来的“00000-00000-00000-00000”变成了一串32位的字符串了:<ignor ...

  5. linux 中两个文档怎么对比内容是否一致

    可以用diff命令对比文档内容.[语法]: diff [参数] 文件1 文件2[说明]: 本命令比较两个文本文件,将不同的行列出来-b 将一串空格或TAB 转换成一个空格或TAB-e 生成一个编辑角本 ...

  6. 第八讲_图像问答Image Question Answering

    第八讲_图像问答Image Question Answering 课程结构 图像问答的描述 具备一系列AI能力:细分识别,物体检测,动作识别,常识推理,知识库推理..... 先要根据问题,判断什么任务 ...

  7. 【转】css浮动元素的知识

    原文: http://www.cnblogs.com/xuyao100/p/8940958.html ------------------------------------------------- ...

  8. Unity3D:Gizmos画圆(原创)

    Unity3D引擎技术交流QQ群:[21568554] Gizmos是场景视图里的一个可视化调试工具. 在做项目过程中.我们常常会用到它,比如:绘制一条射线等. Unity3D 4.2版本号截至.眼下 ...

  9. sklearn特征选择和分类模型

    sklearn特征选择和分类模型 数据格式: 这里.原始特征的输入文件的格式使用libsvm的格式,即每行是label index1:value1 index2:value2这样的稀疏矩阵的格式. s ...

  10. ios 清理缓存(EGO)

    一段清理缓存的代码例如以下: dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,) , ^{ NSSt ...