package com.socks.jiandan.view; import android.content.Context; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import com.nostra13.universalimageloader.core.ImageLoader; import com.socks.jiandan.callback.LoadFinishCallBack; import com.socks.jiandan.callback.LoadMoreListener; import com.socks.jiandan.view.imageloader.ImageLoadProxy; /** * Created by zhaokaiqiang on 15/4/9. */ public class AutoLoadRecyclerView extends RecyclerView implements LoadFinishCallBack { private LoadMoreListener loadMoreListener; private boolean isLoadingMore; public AutoLoadRecyclerView(Context context) { this(context, null); } public AutoLoadRecyclerView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AutoLoadRecyclerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); isLoadingMore = false; addOnScrollListener(new AutoLoadScrollListener(null, true, true)); } /** * 如果需要显示图片,需要设置这几个参数,快速滑动时,暂停图片加载 * * @param pauseOnScroll * @param pauseOnFling */ public void setOnPauseListenerParams(boolean pauseOnScroll, boolean pauseOnFling) { addOnScrollListener(new AutoLoadScrollListener(ImageLoadProxy.getImageLoader(), pauseOnScroll, pauseOnFling)); } public void setLoadMoreListener(LoadMoreListener loadMoreListener) { this.loadMoreListener = loadMoreListener; } @Override public void loadFinish(Object obj) { isLoadingMore = false; } /** * 滑动自动加载监听器 */ private class AutoLoadScrollListener extends OnScrollListener { private ImageLoader imageLoader; private final boolean pauseOnScroll; private final boolean pauseOnFling; public AutoLoadScrollListener(ImageLoader imageLoader, boolean pauseOnScroll, boolean pauseOnFling) { super(); this.pauseOnScroll = pauseOnScroll; this.pauseOnFling = pauseOnFling; this.imageLoader = imageLoader; } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); //由于GridLayoutManager是LinearLayoutManager子类,所以也适用 if (getLayoutManager() instanceof LinearLayoutManager) { int lastVisibleItem = ((LinearLayoutManager) getLayoutManager()).findLastVisibleItemPosition(); int totalItemCount = AutoLoadRecyclerView.this.getAdapter().getItemCount(); //有回调接口,并且不是加载状态,并且剩下2个item,并且向下滑动,则自动加载 if (loadMoreListener != null && !isLoadingMore && lastVisibleItem >= totalItemCount - 2 && dy > 0) { loadMoreListener.loadMore(); isLoadingMore = true; } } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { if (imageLoader != null) { switch (newState) { case SCROLL_STATE_IDLE: imageLoader.resume(); break; case SCROLL_STATE_DRAGGING: if (pauseOnScroll) { imageLoader.pause(); } else { imageLoader.resume(); } break; case SCROLL_STATE_SETTLING: if (pauseOnFling) { imageLoader.pause(); } else { imageLoader.resume(); } break; } } } } }