热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实现微信图片加载显示进度的效果LoadingProgress

分析从网络上加载图片是一种耗时的操作,当加载的图片体积越大,消耗的时间也会更长。向ImageView添加一个进度条的话,可以起到一定的效果。而在我们Android里面,据我了解,想
分析

从网络上加载图片是一种耗时的操作,当加载的图片体积越大,消耗的时间也会更长。向ImageView添加一个进度条的话,可以起到一定的效果。而在我们Android里面,据我了解,想实现ImageView添加进度条的方法有两种:
1.新建一个类extends ImageView,在draw()方法里面画进度。
2.可以在你的ImageView外围添加RelativeLayout,然后,在里面加多一个ProgressBar。

LoadingProgress用的都不是以上两种方法。而是采用了extends Drawable的形式,然后注入到ImageView图层上面。

对比

先从上面第二种来说,在外围嵌套RelativeLayout再放多一个ProgressBar,如果在ListView里面这样来写的话,性能绝对会受到影响,因为多绘制两个控件,Android就要多点耗时时间,内存也会占用。
第一种和我的那种对比的话,我的那种可能会相对占用一点内存,但是相对的,灵活性和扩展性就高了,为什么这样说呢?比如,你有时候需要用到手势缩放这种Extends ImageView的控件,总不可能继承与手势缩放,再重新封装代码对吧?
我的只要是继承于ImageView和可以监听到下载图片进度的回调,都可以实现像QQ和微信那种加载进度条,可以动态的调整圆环大小和字体大小,颜色和其他的。

附上效果图

《实现微信图片加载显示进度的效果-LoadingProgress》 这里写图片描述

用法

//用法也是挺简单的,只需要几行代码
CircleProgress progress = new CircleProgress.Builder() // .....从建造者里面设置你的属性,园底层颜色,进度颜色,字体大小颜色等..
.build();//返回CircleProgress
/**********
* 如果你不想圆形进度条,你可以使用其他的进度条
* 比如:RectangleProgress(长形进度条)
* RotateProgress(实现自动旋转的进度条)
* LevelProgress(这个我也不好解析,类似效果图水杯的那种效果)
*/
//对于使用Fresco框架的
progress.injectFresco(target);//SimpledraweeView
//除了Fresco框架其他的,均使用这个方法
progress.inject(target);//target为你的ImageView
//接着加载你的图片把

最后,你需要监听到图片下载进度变化的事件,Fresco框架的不需要。

在你的进度回调方法里面:

@Override
public void update(long current,long total){
//当前进度值
progress.setLevel((int)current);
//最大进度值
progress.setMaxValue(total);
}

对于使用Glide和Picasso框架的人来说,获取进度变化的回调可能会有点困难,不过可参考我的DEMO,使用Okhttp3拦截进度事件,不过也有点问题,特别大的图片加载不出来,我也不太了解OKhttp3进度获取,希望有人能指点一下我!

Github

https://github.com/peng8350/LoadingProgress
欢迎大家来star一下我,我是第一次写开源项目,难免会有一些问题,希望大家可以提出来!


推荐阅读
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
author-avatar
爲妳奮鬥壹輩子丶故事_932
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有