ImageLoader 滑动暂停加载

    现在还是有很多人在用ImageLoader,这个老牌的图片加载库,优点还是很多的:自动异步,自定义缓存、线程、延迟时间、等各种参数配置,能支持大多数的格式。在不对性能和适用场景做太高要求的情况下,这是一款大众皆可食用的库。

在这个库中有一个很实用的方法,可以在滑动的时候暂停加载图片,可以很大的提升流畅度。如下:

rv_main.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true));

后两个参数分别代表水平和垂直滑动的时候是否暂停。

不过当我使用了最新的RecyclerView时候似乎不能使用这个PauseOnScrollListener监听。后来查看源码发现这样一段

@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		switch (scrollState) {
			case OnScrollListener.SCROLL_STATE_IDLE:
				imageLoader.resume();
				break;
			case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
				if (pauseOnScroll) {
					imageLoader.pause();
				}
				break;
			case OnScrollListener.SCROLL_STATE_FLING:
				if (pauseOnFling) {
					imageLoader.pause();
				}
				break;
		}
		if (externalListener != null) {
			externalListener.onScrollStateChanged(view, scrollState);
		}
	}

很明显源码里面就是通过监听滑动状态来进行图片加载的控制的。而且我还在这里面找到了两个方法 pause() 和 resume() ,自然就是控制暂停和恢复图片加载的方法。于是我手动调用了这两个方法

rv_main.addOnScrollListener(new RecyclerView.OnScrollListener() {

                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    super.onScrollStateChanged(recyclerView, newState);
                    switch (newState) {
                        case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
                            ImageLoader.getInstance().resume();
                            break;
                        case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                            ImageLoader.getInstance().pause();
                            break;
                        case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
                            ImageLoader.getInstance().pause();
                            break;
                    }
                }
            });

 

转载于:https://my.oschina.net/u/2524924/blog/716355

你可能感兴趣的:(ImageLoader 滑动暂停加载)