位置: 编程技术 - 正文

安卓瀑布流,二级缓存实现(瀑布流软件)

编辑:rootadmin

推荐整理分享安卓瀑布流,二级缓存实现(瀑布流软件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:安卓开发瀑布流ui,ios瀑布流,安卓瀑布流布局,ios瀑布流,ios瀑布流,安卓 瀑布流,安卓开发瀑布流ui,安卓开发瀑布流ui,内容如对您有帮助,希望把文章链接给更多的朋友!

瀑布流是现在非常流行的一个效果,多用于图片展示,图片不规则排列,目前很多应用都在使用这一特效。

实现瀑布流的大概步骤:

1.界面可滑动,最外层是一个自定义的ScrollView

2.ScrollView里一个横向的LinearLayout包裹着三个竖向排列的LinearLayout

3.图片的内存缓存以及压缩

4.图片的SD卡缓存

5,加载图片:先从内存中获取,-如果内存中不存在------>去SD卡找,如果SD卡也不存在------>网络下载。

6.获取每一列的LineayLayout的height,将图片add到高度最小的容器里

一、布局:

最外层是一个自定义的ScrollView,先略过,主要看下面四个LinearLayout的嵌套

最外层的LinearLayout是水平排列,包裹着三个竖向排列的LinearLayout

二、内存缓存:

LruCache,安卓系统提供的一个工具类,来帮助我们实现内存缓存

1.私有构造方法:获取LruCache的实例,并获取系统最大的运行内存除,开辟1/的内存来实现图片的缓存

2.getInstance(),单例模式,我们可能不止一次或在多个地方使用到这个缓存类,如果多次实例化对象,可能内存会超出系统最大内存,容易造成OOM

3.getBitmapFromMemoryCache(),根据key从内存中获取到一个Bitmap

4.addBitmapToMemoryCache(),如果内存中没有这张图片,将其添加到内存中。

5.calcInSampleSize(),根据图片的原始宽度计算出期望缩放的比例

6.decodeSampleBitmapFromResource(),根据计算出的缩放比例,重新绘制Bitmap

安卓瀑布流,二级缓存实现(瀑布流软件)

inJustDecodeBounds 状态为true时,BitmapFactory.decodeFile(options,width);并不会真正的返回给你一个Bitmap,而是把bitmap的实际宽高返回给你,这样极大的解决了内存占用问题,也不会那么容易出现OOM异常了,通过options.outWidth,options.outHeight可以获取到Bitmap的宽高

三、SD卡缓存类

1.hasSDCard()判断当前设备有没有SD卡

2.getImagePath(String url),根据‘/’截取图片名称,并将其缓存到内存卡根目录的文件夹内,图片地址为目录&#;截取到的图片名称

3.downImage(String url,int redWidth) 通过HttpClient请求网络,并将返回的图片缓存至SD卡,

到现在为止,我们需要的工具类已经封装完毕

下面就一起来定制我们的ScrollView吧

.主要四个方法,loadMoreImages()加载图片,setImage()将bitmap放到容器中,getMinHeightColumn()上面说到我们的ImageView会放到高度最小的Column中,所以我们需要一个方法,将最小高度的列获取出来,最后是一个异步加载图片的AsyncTask类。

1.loadMoreImages(),这个方法中我们首先需要获取图片的路径,并且循环下载张图片,page表示当前第几页,PAGE_COUNT表示每页加载的图片数量,那么我们获取图片的url需要将当前一共加载了几张图片获取,以便分页加载时正确获取url,endIndex表示下一页要加载图片的数量,那么这时候会有一个问题出现,就是假设我们刚好有张图片,也就是url只有个,如果我们不做任何处理,系统将会抛出一个下标越界的这样一个异常,所以当我们期望加载的图片超过我们总图片的时候,我们要将期望加载的数量等于我们实际的URL的length,接下来就是循坏开启条异步线程去网络加载了。

2.在加载的过程中我们并不一定要去网络加载,可能我们不是第一次进入应用或者说我们已经将图片缓存到内存中或SD卡中,这个时候就需要我们判断了,通过ImageCache这个类去内存中拿图片,如果拿到,直接返回一个bitmap。如果内存中不存在,我们会去sd卡中获取,如果sd卡中同样不存在,这个时候就需要我们去网络中获取了。那么如果sd卡中存在的话,将其图片压缩后同样缓存到内存中,并且返回bitmap对象。

接下来说一下onPostExecute()这个方法,这个方法相信有一点安卓基础的童鞋都知道,是AsyncTask执行完毕返回结果的一个方法,我们在异步任务中已经将bitmap返回了,这个时候在这个方法中我们只需要判断bitmap不为空的话将图片放到我们的某一列中,

3,.setImage(),这里我们需要将一个ImageView通过 ImageView imageView = new ImageView(getContext());的方法得到一个Image控件,并且为其设置我们计算出的高度,以及我们列的宽度,图片获取出来我们还需要获取当前界面中哪一列的高度最小,我们就将这个ImageView放置到哪一列当中。

4.getMinHeightColumn(),这个方法相对来说就非常简单了,需要注意的是我们返回的如果是第一列,那么要将我们第一列的高度加上ImageView的高度,这样才方便于我们下一张图片的放置。

好了,现在我们只需要调用这个getMinHeightColumn().addView(imageView),将我们的image放置进去就可以了。

接下来还有一个简单的分页加载,这里我设置了一个view的触摸监听,当手指离开屏幕时,通过handler来加载图片。handler里我们只需要做一些简单的判断,判断是否滑动到了底部,如果滑动到了底部,我们调用第一个方法loadMoreImages()就可以加载下一页图片了。

demo下载地址:

版权声明:本文为博主原创文章,未经博主允许不得转载。

[安卓]手机管家(二十一)杀毒UI及SlidingDrawer(抽屉效果) 关于布局扫描的圈圈是两张图叠加在一块的,需要帧布局进度条的属性用到style注意,随着扫描的越来越多,listview应该在scroll里面,否则屏幕满了动不

正确的解决GridLayout在安卓4.0以下版本中兼容问题 GridLayout是安卓4.0版本加入的,它可以用来取代TableLayout,同时提供了自由度较大且更加使用的排版功能,给开发者带来了福音。然后,到真正使用时,

【Android】图片资源的访问与网格式图片浏览器 使用Android的GridView与BaseAdapter能够轻易完成网式图片浏览器。下面用一个例子还说明,同时说明安卓是如何访问图片资源。其实所谓的图片资源,就是你

标签: 瀑布流软件

本文链接地址:https://www.jiuchutong.com/biancheng/382153.html 转载请保留说明!

上一篇:[安卓]手机管家(二十) 缓存清理(安卓手机管家在哪里打开)

下一篇:[安卓]手机管家(二十一)杀毒UI及SlidingDrawer(抽屉效果)(安卓手机管家删除的照片怎么恢复)

  • 房地产零税率
  • 工程项目结算流程图
  • 维修费开发票选择什么税收分类编码
  • 综合利用资源减计收入
  • 应付债券利息计入哪里
  • 公司注销实收资本怎么处理
  • 房地产契税新政策2021退税
  • 固定资产抵扣期限
  • 小规模纳税人国企
  • 私自安装路灯违法吗?
  • 房地产开发成本占比
  • 土地闲置费能否扣除
  • 注册资本与利息的税前扣除
  • 生产车间制造费用包括
  • 计提的坏账准备可以转回吗
  • 企业所得税申报流程
  • php日期差
  • 以房产投资联营,收取固定收入,不承担联营风险的房产
  • 增值税进项税转出什么意思
  • 收入的特征包括什么
  • 交易性金融资产包括哪些项目
  • vue3性能对比
  • linuxweb服务器搭建教程
  • 消防工程改造方案
  • 海獭妈妈和新生儿的故事
  • php做登录界面连接数据库
  • 公司注销后虚开能查吗
  • DOMException: Failed to execute ‘insertBefore‘ on ‘Node‘: The node before which the new node ...报错
  • 视图的定义和操作实验报告
  • h5与小程序交互
  • Node.js——http模块和导出共享
  • postman密码
  • 农业合作社需要纳税吗
  • 红冲暂估是什么意思
  • 公司逾期交税,后期补上有何后果
  • mysql基本sql语句大全(基础用语篇)
  • phpcms使用教程
  • 支付员工工伤医疗费用怎么做账
  • 卸载sql server 2008
  • 小规模纳税人代销商品增值税如何计算
  • 处置长期股权投资其他综合收益结转
  • 股东的报销款可以抵投资款吗
  • 收到所得税退税现金流量选哪个
  • 帐务处理是指什么工作
  • 汽车销售和租赁业务描述
  • 物流企业发生的费用包括
  • 信用减值损失在利润表怎么填列
  • 单位的车辆
  • 企业储蓄存款如何做账
  • 小规模纳税人开的专票对方可以抵扣吗
  • 预付费用款项现金流量怎么算
  • 如果对装修费用有异议怎么办
  • 佣金支付给谁
  • 个体户4年不注销有事吗
  • 税务开票系统如何设置不用重复登录
  • 进项发票和销项发票怎么抵扣
  • 短期借款核算的会计分录
  • 固定资产明细账图片
  • 劳务成本如何核算
  • 会计师事务所工作怎么样
  • ubuntu系统睡眠
  • win10正版系统禁止设置密码
  • 电脑开机时出现红色三角形
  • win7系统摄像头图标不见了
  • 微信小程序页面滚动
  • 简单掌握办公软件怎么写
  • 利用nodejs实现百度文本审核
  • perl 比较符
  • [置顶]马粥街残酷史
  • 汉诺塔游戏教程
  • [置顶]从lv2开始开挂的原勇者候悠闲的异世界生活
  • python井字游戏
  • unity3d怎么让物体依次运动
  • unity ngui
  • unity程序基础框架
  • JavaScript数据类型分为哪两大类
  • Javascript & DHTML 实例编程(教程)DOM基础和基本API
  • ajax获取数据两种类型
  • 江苏国税电子国税局
  • 云开票怎么报税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设