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. BZOJ1367【Baltic2004】sequence

    题面 Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Output 13 Hint 所求的Z序列为6,7, ...

  2. php curl xml传输和转换

    <?php /** * API * User: sgfoot * Date: 2017/3/20 * Time: 18:05 */ class apiCurl { private $config ...

  3. python的私有化

    1.双下划线(__) 由双下划线開始的属性在执行时被混淆,所以直接訪问是不同意的.实际上以双下划线開始的属性 会在解释时在前面加上下划线和类名.如self.__num会被解析为self._classN ...

  4. 从头写一个Cucumber测试(二) Cucumber Test

    转载:https://yaowenjie.github.io/%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/cucumber-test-part-2 承接上文   前一篇博 ...

  5. C++ 继承与接口 知识点 小结(一)

    [摘要] 要求理解覆盖.重载.隐藏的概念与相互之间的差别.熟记类继承中对象.函数的訪问控制:掌握虚函数.虚函数表.虚函数指针的联系:理解区分虚函数和虚继承在虚方法.虚指针在空间分配上的重点与难点:熟练 ...

  6. 小胖说事20--------GCD笔记

    1.系统提供的dispatch方法 为了方便的使用GCD.苹果提供了一些方法方便我们将BLOCK放在主线程或者后台程序运行.或者延后运行. //后台运行: dispatch_async(dispatc ...

  7. Spring集成JDBC

    不同spring版本合成的方式,有时候不一样,需要查看帮助文档来看如何集成,帮助文档在spring发行包中. 1.导入spring的包(这里吧Spring-3.1.3 Release的所有jar包都导 ...

  8. WinDbg抓取dmp文件

    应用程序发生异常时抓取dmp: adplus.vbs -crash -pn w3wp.exe -y srv*c:\symbols*http://msdl.microsoft.com/download/ ...

  9. java多个文件压缩下载

    public static void zipFiles(File[] srcfile,ServletOutputStream sos){ byte[] buf=new byte[1024]; try ...

  10. python(2)- python程序的编写简单介绍

    一.语句和语法 # 注释 \ 转译回车,继续上一行,在一行语句较长的情况下可以使用其来切分成多行,因其可读性差所以不建议使用 : 将两个语句连接到一行,可读性差,不建议使用 : 将代码的头和体分开 语 ...