/* * Copyright (c) 2015 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> * All Rights Reserved. */ package me.zhanghai.android.douya.ui; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; import com.android.volley.TimeoutError; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import java.util.List; import butterknife.ButterKnife; import me.zhanghai.android.douya.R; import me.zhanghai.android.douya.util.ImageUtils; import me.zhanghai.android.douya.util.ViewUtils; import uk.co.senab.photoview.PhotoView; import uk.co.senab.photoview.PhotoViewAttacher; public class GalleryAdapter extends PagerAdapter { private List<String> mImageList; private OnTapListener mOnTapListener; public GalleryAdapter(List<String> imageList, OnTapListener onTapListener) { mImageList = imageList; mOnTapListener = onTapListener; } @Override public int getCount() { return mImageList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public View instantiateItem(ViewGroup container, int position) { View layout = ViewUtils.inflate(R.layout.gallery_item, container); PhotoView imageView = ButterKnife.findById(layout, R.id.image); final TextView errorText = ButterKnife.findById(layout, R.id.error); final ProgressBar progressBar = ButterKnife.findById(layout, R.id.progress); imageView.setOnViewTapListener(new PhotoViewAttacher.OnViewTapListener() { @Override public void onViewTap(View view, float x, float y) { if (mOnTapListener != null) { mOnTapListener.onTap(); } } }); ImageUtils.loadImage(imageView, mImageList.get(position), new RequestListener<String, GlideDrawable>() { @Override public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { (e != null ? e : new NullPointerException()).printStackTrace(); int errorRes = e != null && e.getCause() instanceof TimeoutError ? R.string.gallery_load_timeout : R.string.gallery_load_error; errorText.setText(errorRes); ViewUtils.crossfade(progressBar, errorText); return false; } @Override public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { ViewUtils.fadeOut(progressBar); return false; } }); container.addView(layout); return layout; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } public interface OnTapListener { void onTap(); } }