利用滑翔怎么实现一个加载进度条功能

  介绍

利用滑翔怎么实现一个加载进度条功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>使用

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
  公共DataFetchergetResourceFetcher(字符串模式,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。进步>

看完上述内容,你们掌握利用滑翔怎么实现一个加载进度条功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

利用滑翔怎么实现一个加载进度条功能