长图优化

现在市面上 95 % 以上,APP 都有预览图片的功能,那么是怎么做的勒,今天我们就来仿照 微博 预览长图,来对长图优化。

怎么使用
1.project/build.gradle

allprojects {repositories {...maven { url 'https://jitpack.io' }}}

2.app/build.gradle

dependencies {implementation 'com.github.yangkun19921001:long_picture_view:1.0.2'}

3.xml 中直接使用

 <com.yk.big_picture_library.BigViewandroid:id="@+id/bv_img"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

代码中

BigView bigView=findViewById(R.id.bv_img);//加载路径bigView.setImage(BIG_IMAGE_PAHT);//加载 InputStreambigView.setImage(InputStream is)//加载网络图片 callBack : 加载中的回调bigView.setNetUrl(String url,LoadNetImageCallBack callBack);

效果对比
微博长图效果

仿照微博预览长图效果

效果是不是很丝滑,原图是 12 M 压缩后不到 2 M ,加载前可以压缩下

内存使用状态

内存无泄漏,无抖动,无溢出 。这里在提一下如果对内存优化不了解的可以看下之前的文章

Java 堆内存: 5 - 6 M 之间

Native 占用内存: 25 M 左右

解决思路

粗略步骤:

  1. 沿着对角线缩放
  2. 加载屏幕能够看见的区域
  3. 复用上一个 bitmap 区域的内存
  4. 处理滑动

详细步骤

  1. 定义 Rect 图片需要加载的区域
  2. 定义图片复用 BitmapFactory.Options()
  3. 定义手势识别GestureDetector 上下左右滑动的帮助类
  4. 定义一个滑动帮组类 Scroller
  5. 加载图片信息并不是加载真正的图片
  6. 开启内存复用功能
  7. 创建一个区域解码器,只解码一部分。
  8. 刷新 requestLayout
  9. 确定加载图片的区域,计算缩放比列
  10. onDraw绘制区域图片
  11. 将图片区域缩放得到 View 的大小
  12. drawBitmap 绘制图片
  13. 处理滑动事件交给手势处理
  14. 随着手指滑动改变现实区域Rect,判断头部底部界限
  15. invalidate 不断重绘 onFling , computeScroll 处理惯性问题
  16. invalidate 不断重绘

性能优化(四)长图优化,仿微博加载长图方式相关推荐

  1. Android加载长图,仿微博长图滚动查看

    /** * Created by sunrui on 2017/3/8. * 加载长图片 * 解决步骤 * 1.将图片缩放到与控件等宽 * 2.判断缩放后的图片高度,如果高度大于控件高度较多(这里设置 ...

  2. 自定义动画(仿Win10加载动画)——优化

    此为前文章写的仿Win10加载动画的优化版 源代码 已更新到github 优化分析 原生 自定义高仿(v1版) 一直觉得自己写的与原生的有差别,经过仔细对比观察,发现: 原生的圆点出发位置不是都在底部 ...

  3. 前端性能优化的重要方案:图片懒加载

    大家好,我是前端岚枫,一枚二线城市的程序媛,今天主要跟大家分享我整理的前端性能优化的重要方案:图片懒加载,主要包括其原理,我们常用的一些插件,及编写源码实现图片懒加载功能等,图片懒加载是项目比较常见的 ...

  4. Android加载超长图(微博长图)

    对于一些需要加载超长图需求的同学,可能一开始使用使用bitmap或者inputstream转bitmap(或类似加载库)会发现出现图片太大加载不出来的问题(其实我也是遇到了这个问题ヽ(≧Д≦)ノ).解 ...

  5. android开发 加载大图,Android加载超长图(微博长图)

    对于一些需要加载超长图需求的同学,可能一开始使用使用bitmap或者inputstream转bitmap(或类似加载库)会发现出现图片太大加载不出来的问题(其实我也是遇到了这个问题ヽ(≧Д≦)ノ).解 ...

  6. 安卓设置菊花动画_Android仿ios加载loading菊花图效果

    项目中经常会用到加载数据的loading显示图,除了设计根据app自身设计的动画loading,一般用的比较多的是仿照ios 的菊花加载loading 图,当然一些条件下还会涉及到加载成功/ 失败情况 ...

  7. Android之SubsamplingScaleImageView加载长图不能放缩问题

    1 问题 第三方开源框架用了这个第三方开源框架(SubsamplingScaleImageView)加载长图,但是源代码在有些手机上面不能进行放缩. private void displayLongP ...

  8. android如何加载长图

    思路:那就是对于一张巨型图片我们可否每次指定一块区域加载显示,然后通过改变这个区域完成整张巨图的加载呢?这样内存中只有完整图片的一块区域. 区域加载 1.BitmapRegionDecoder 指定B ...

  9. android加载长图宽度自适应,Android使用Glide加载超长图

    app项目开发过程中,大都有查看图片详情的功能模块.实现的方式一般都是通过viewpager+photoView+Glide的方式.这种方式下,如果碰到加载超长图,比如说高清版的清明上河图/世界地图, ...

最新文章

  1. 剑破冰山—Oracle开发艺术 书评(by ora-600)
  2. 企业网站外链发布有技巧
  3. Python输出黄金分隔数列前n项。 黄金分隔数列由Fibonacci数列相邻两项之比组成:1/1,1/2,2/3,3/5,5/8,...其取值逐渐接近黄金分隔数。
  4. Bit-Z全球生态联盟暨韩国战略发布会即将开启
  5. c语言知道坐标求线段长度,C语言编写程序:输入任意3线段的长度,判断组成三角形的种类...
  6. spring三种注入方式
  7. Matrix 高斯消元Gaussian elimination 中的complete pivoting和partial pivoting
  8. Linux Hugetlbfs内核源码简析-----(二)Hugetlbfs挂载
  9. azure云数据库_保护Azure SQL数据库免于意外删除
  10. ES6模块的循环加载
  11. NASA、西门子和大众都在用的 IoT 协议可遭滥用
  12. Error: Invalid or corrupt
  13. 组织结构流程图模板分享
  14. Typecho博客主题 - Joe主题再续前缘版
  15. mysql启动黑屏_红警win10黑屏和不显示菜单栏问题 只有声音没有图像的解决
  16. 类似于萝卜书摘的书摘app推荐
  17. vue2 provide和inject的使用
  18. EPICS教程1 -- 在Linux/UNIX/DARWIN(MAC)上安装
  19. 安得广厦千万间,大赚天下寒士俱欢颜
  20. nginx 通过路径分发 网站/端口/服务

热门文章

  1. 2021年宁波市建筑物轮廓及高度矢量数据
  2. 深度讲解linux中strstr()函数
  3. 布林通道参数用20还是26_布林通道最佳参数
  4. 来自同济子豪兄的无私分享-关于YOLOv1模型的学习(一)
  5. Unity第一人称手游-左侧控制移动,右侧控制视角和方向(第一人称,类似吃鸡游戏)
  6. AB分区保留面具升级系统(安卓11不丢面具升级系统)
  7. GTA5内置html菜单源码,GTA5免费内置菜单辅助
  8. 基站定位-基于基站的移动台定位系统
  9. Linux RPMsg框架--以及应用于iMX6 SoloX连接A9和M4 Core
  10. 【数学建模绘图系列教程】绘图模板总结