前言
前面我们讲解了渐进式加载的基础,接下来我们就讲一下在app中具体如何实现渐进式加载
1.基础
关于渐进式加载的基础知识,我们已经在前面讲解过了,这里就不重复讲解了,但是不代表不重要.
http://blog.youkuaiyun.com/yulyu/article/details/61915471
2.背景
Android图片加载主要有四大框架,但是只有Fresco框架是可以支持渐进式加载(需要设置)
笔者是由于项目已经使用Glide,且跟换框架成本太大,所以才尝试用Glide实现渐进式加载,但是Glide本身框架目前是不适合做渐进式加载,里面的请求是将整个InputStream转化为bitmap后才通过回调设置给ImageView,这个过程只能走一次.笔者做了很多尝试来让Glide实现渐进式加载,虽然最后实现了这个功能,但是会破坏Glide的结构,影响内部的一些优化和设置,比如缓存和防止错位等,所以这里就不介绍这个实现过程了,但是在这个过程中,使用到一些实现渐进式加载的操作,可以介绍一下.
3.实现
首先我们定义一个类,来通过网络请求来获取InputStream
(HttpUrlFetcher是glide里面的一个实现类,这里将里面的代码简化一下,拿来使用)
//HttpUrlFetcher.java
public class HttpUrlFetcher {
private static final String TAG = "HttpUrlFetcher";
private HttpURLConnection urlConnection;
private int size;
public int getSize() {
return size;
}
public InputStream loadData(URL url)
throws IOException {
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(2500);
urlConnection.setReadTimeout(2500);
urlConnecti