package com.dl7.mvp.adapter; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import com.dl7.mvp.R; import com.dl7.mvp.local.table.BeautyPhotoInfo; import com.dl7.mvp.utils.ImageLoader; import com.github.ybq.android.spinkit.SpinKitView; import java.util.Collections; import java.util.List; import uk.co.senab.photoview.PhotoView; import uk.co.senab.photoview.PhotoViewAttacher; /** * Created by long on 2016/8/29. * 图片浏览适配器 */ public class PhotoPagerAdapter extends PagerAdapter { // 限制 Adapter 在倒数第3个位置时启动加载更多回调 private final static int LOAD_MORE_LIMIT = 3; private List<BeautyPhotoInfo> mImgList; private Context mContext; private OnTapListener mTapListener; private OnLoadMoreListener mLoadMoreListener; private boolean mIsLoadMore = false; public PhotoPagerAdapter(Context context, List<BeautyPhotoInfo> imgList) { this.mContext = context; this.mImgList = imgList; } public PhotoPagerAdapter(Context context) { this.mContext = context; this.mImgList = Collections.EMPTY_LIST; } public void updateData(List<BeautyPhotoInfo> imgList) { this.mImgList = imgList; notifyDataSetChanged(); } public void addData(List<BeautyPhotoInfo> imgList) { mImgList.addAll(imgList); notifyDataSetChanged(); mIsLoadMore = false; } @Override public int getCount() { return mImgList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, final int position) { View view = LayoutInflater.from(mContext).inflate(R.layout.adapter_photo_pager, null, false); final PhotoView photo = (PhotoView) view.findViewById(R.id.iv_photo); final SpinKitView loadingView = (SpinKitView) view.findViewById(R.id.loading_view); final TextView tvReload = (TextView) view.findViewById(R.id.tv_reload); if ((position >= mImgList.size() - LOAD_MORE_LIMIT) && !mIsLoadMore) { if (mLoadMoreListener != null) { mIsLoadMore = true; mLoadMoreListener.onLoadMore(); } } final RequestListener<String, GlideDrawable> requestListener = new RequestListener<String, GlideDrawable>() { @Override public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { loadingView.setVisibility(View.GONE); tvReload.setVisibility(View.VISIBLE); return false; } @Override public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { loadingView.setVisibility(View.GONE); tvReload.setVisibility(View.GONE); photo.setImageDrawable(resource); return true; } }; ImageLoader.loadCenterCrop(mContext, mImgList.get(position % mImgList.size()).getImgsrc(), photo, requestListener); photo.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() { @Override public void onPhotoTap(View view, float x, float y) { if (mTapListener != null) { mTapListener.onPhotoClick(); } } }); tvReload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { tvReload.setVisibility(View.GONE); loadingView.setVisibility(View.VISIBLE); ImageLoader.loadCenterCrop(mContext, mImgList.get(position % mImgList.size()).getImgsrc(), photo, requestListener); } }); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } /** * 是否收藏 * @param position * @return */ public boolean isLoved(int position) { return mImgList.get(position).isLove(); } /** * 是否点赞 * @param position * @return */ public boolean isPraise(int position) { return mImgList.get(position).isPraise(); } /** * 是否下载 * @param position * @return */ public boolean isDownload(int position) { return mImgList.get(position).isDownload(); } /** * 获取对应数据 * @param position * @return */ public BeautyPhotoInfo getData(int position) { return mImgList.get(position); } public BeautyPhotoInfo getData(String url) { for (BeautyPhotoInfo bean : mImgList) { if (bean.getImgsrc().equals(url)) { return bean; } } return null; } public void setTapListener(OnTapListener listener) { mTapListener = listener; } public void setLoadMoreListener(OnLoadMoreListener loadMoreListener) { mLoadMoreListener = loadMoreListener; } public interface OnTapListener { void onPhotoClick(); } public interface OnLoadMoreListener { void onLoadMore(); } }