带进度值的GlideProgress

简介: 带进度值的GlideProgress

带进度值的GlideProgress

GlideProgress 基于

Glide的底层是基于okhttp实现的

implementation 'com.github.bumptech.glide:glide:3.7.0'
    implementation 'com.squareup.okhttp:okhttp:2.4.0'
    implementation 'com.squareup.okio:okio:1.5.0'

ProgressResponseBody

private ResponseBody responseBody;
private ProgressListener progressListener;
private BufferedSource bufferedSource;
public ProgressResponseBody(ResponseBody responseBody, ProgressListener progressListener) {
    this.responseBody = responseBody;
    this.progressListener = progressListener;
}
@Override
public MediaType contentType() {
    return responseBody.contentType();
}
@Override
public long contentLength() {
    try {
        return responseBody.contentLength();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 0;
}
@Override
public BufferedSource source() {
    if (bufferedSource == null) {
        try {
            bufferedSource = Okio.buffer(source(responseBody.source()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return bufferedSource;
}
private Source source(Source source) {
    return new ForwardingSource(source) {
        long totalBytesRead = 0;
        @Override
        public long read(Buffer sink, long byteCount) throws IOException {
            long bytesRead = super.read(sink, byteCount);
            totalBytesRead += bytesRead != -1 ? bytesRead : 0;
            if (progressListener != null)
                progressListener.progress(totalBytesRead, responseBody.contentLength(), bytesRead == -1);
            return bytesRead;
        }
    };
}

代码下载地址,复制粘贴进去就可用


目录
相关文章
|
5月前
|
C# C++
C# 自定义时间进度条
本文作者通过参考leslie_xin的一篇文章,成功创建了一个自定义的WinForms控件——时间进度条,该控件带有时间刻度和多种可定制的属性,如颜色、时间间隔等。作者在控件中加入了开始和结束时间,以及自适应的时间刻度间隔。控件能根据设置显示时间标签,并提供了事件处理,如值改变时的触发。代码中包含了计算时间刻度、绘制刻度线和时间标签的逻辑。作者强调了避免循环调用事件、使用OnXXX()形式的事件处理函数以及注意自定义控件中的属性和事件设计。
134 7
|
网络协议 Java 网络架构
每月进度总结 7月1日~7月22日(下)
每月进度总结 7月1日~7月22日(下)
83 0
|
域名解析 存储 网络协议
每月进度总结 7月1日~7月22日(上)
每月进度总结 7月1日~7月22日(上)
75 0
ookie 值的修改方案
ookie 值的修改方案
93 0
|
存储 资源调度 数据可视化
R问题|数值模拟流程记录和分享
R问题|数值模拟流程记录和分享
146 0
PyQt5 技术篇-QSpinBox选值框值改变触发事件实例演示,获取QSpinBox组件的值,选值框的边界值设置方法
PyQt5 技术篇-QSpinBox选值框值改变触发事件实例演示,获取QSpinBox组件的值,选值框的边界值设置方法
729 0
PyQt5 技术篇-QSpinBox选值框值改变触发事件实例演示,获取QSpinBox组件的值,选值框的边界值设置方法
|
前端开发 JavaScript
51、进度事件
进度事件用来描述资源加载的进度,主要由 AJAX 请求、<img>、<audio>、<video>、<style>、<link>等外部资源的加载触发,继承了ProgressEvent接口。它主要包含以下几种事件。
158 0
|
算法
设置无效,为什么下载分数经常变化?
设置无效,为什么下载分数经常变化?
83 0
|
监控 C#
c# 判断文件是否发生了变化
你这个是想文件发生改变时,自动调用一个函数,做出一些操作呢。还是有一个按钮(或者别的什么),你去点击一下,然后检测下一个文件,是否发生了变化?   下面的代码,监控d盘下的所有.txt文件的修改 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
2241 0