介绍
利用滑翔怎么实现一个加载进度条功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>使用强>
Glide.with (MainActivity.this)。使用(新ProgressModelLoader ( 新ProgressHandler (MainActivity。这一点,progressImageView)))。 加载(“http://image2.sina.com.cn/dy/o/2004-11-10/1100077821_2laygS.jpg") .diskCacheStrategy (DiskCacheStrategy.NONE) .into (progressImageView.getImageView ());
滑翔的图片下载底层用的是OkHttp,它已经实现好了,所有要实现进度条加载,就必须要知道图片下载的进度,就要自己来写图片的下来实现,但是滑翔支持不支持呢?网上查了一下发现它有个方法
公共类ProgressModelLoader实现StreamModelLoader{ 私人处理程序处理程序; 公共ProgressModelLoader(处理程序处理程序){ 这一点。处理程序=处理程序; } @Override 公共DataFetcher getResourceFetcher(字符串模式,int宽度,int高度){ 返回新ProgressDataFetcher(模型、处理程序); } }
重写getResourceFetcher方法,这个方法返回一个DataFetcher类,这个类是个数据提取类,是个接口,重写它的loadData方法来下载图片,我们来看下我创建的ProgressDataFetcher对loadData方法的重写
@Override 公共InputStream loadData(优先级优先){抛出异常 请求请求=new Request.Builder () .url (url) .build (); OkHttpClient客户=new OkHttpClient (); client.interceptors阀门()(新ProgressInterceptor (getProgressListener ())); 尝试{ progressCall=client.newCall(请求); 响应响应=progressCall.execute (); 如果(isCancelled) { 返回null; } 如果(! response.isSuccessful()抛出IOException(“意想不到的代码“;+反应); .byteStream流=response.body () (); }捕捉(IOException e) { e.printStackTrace (); 返回null; } 返回流; }
使用okhttp下载图片,添加一个拦截器
私人来源来源(来源来源){ 返回新ForwardingSource(源){ 长totalBytesRead=0; @Override 公共长阅读(缓冲水池,长byteCount)抛出IOException { 长bytesRead=超级。读(水槽,byteCount); totalBytesRead +=bytesRead !=1, # 63;bytesRead: 0; 如果(progressListener !=null) progressListener。进展(totalBytesRead responseBody.contentLength (), bytesRead==1); 返回bytesRead; } }; }
把读到的bytesRead和<代码> responseBody.contentLength() 代码>传给回调方法<代码> progressListener。进步> 代码来计算进度。
看完上述内容,你们掌握利用滑翔怎么实现一个加载进度条功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!