1 package com.moiseum.wolnelektury.view.news.zoom;
3 import android.content.Context;
4 import android.graphics.PorterDuff;
5 import android.support.annotation.NonNull;
6 import android.support.v4.content.ContextCompat;
7 import android.support.v4.view.PagerAdapter;
8 import android.view.LayoutInflater;
9 import android.view.View;
10 import android.view.ViewGroup;
11 import android.widget.Button;
12 import android.widget.ProgressBar;
13 import android.widget.TextView;
15 import com.bumptech.glide.Glide;
16 import com.bumptech.glide.load.resource.drawable.GlideDrawable;
17 import com.bumptech.glide.request.RequestListener;
18 import com.bumptech.glide.request.target.Target;
19 import com.moiseum.wolnelektury.R;
21 import java.lang.ref.WeakReference;
22 import java.util.List;
24 import it.sephiroth.android.library.imagezoom.ImageViewTouch;
25 import it.sephiroth.android.library.imagezoom.ImageViewTouchBase;
28 * Created by Piotr Ostrowski on 07.08.2018.
30 public class ZoomPhotosAdapter extends PagerAdapter {
32 private List<String> photoUrls;
33 private LayoutInflater inflater;
34 private WeakReference<Context> mContext;
36 ZoomPhotosAdapter(List<String> photoUrl, Context context) {
37 inflater = LayoutInflater.from(context);
38 mContext = new WeakReference<>(context);
39 this.photoUrls = photoUrl;
40 for (String photo : photoUrl) {
41 Glide.with(context).load(photo).dontTransform().preload();
47 public Object instantiateItem(@NonNull ViewGroup collection, int position) {
48 final String photoUrl = photoUrls.get(position);
49 View view = inflater.inflate(R.layout.zoom_item, collection, false);
51 final ProgressBar pbLoading = view.findViewById(R.id.pbLoading);
52 final TextView tvLoading = view.findViewById(R.id.tvLoading);
53 final Button btnRetry = view.findViewById(R.id.btnRetry);
54 final ImageViewTouch ivPhoto = view.findViewById(R.id.ivPointPhoto);
56 btnRetry.setOnClickListener(v -> {
57 pbLoading.setVisibility(View.VISIBLE);
58 tvLoading.setVisibility(View.VISIBLE);
59 btnRetry.setVisibility(View.GONE);
60 fetchImageWithGlide(photoUrl, pbLoading, tvLoading, btnRetry, ivPhoto);
63 ivPhoto.setDisplayType(ImageViewTouchBase.DisplayType.FIT_HEIGHT);
64 fetchImageWithGlide(photoUrl, pbLoading, tvLoading, btnRetry, ivPhoto);
66 collection.addView(view);
71 public void destroyItem(@NonNull ViewGroup collection, int position, @NonNull Object view) {
72 collection.removeView((View) view);
76 public int getCount() {
77 return photoUrls.size();
81 public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
82 return view == object;
85 private void fetchImageWithGlide(String photoUrl, final ProgressBar pbLoading, final TextView tvLoading, final Button btnRetry, ImageViewTouch ivPhoto) {
86 if (mContext.get() != null) {
87 Glide.with(mContext.get()).load(photoUrl).dontTransform().listener(new RequestListener<String, GlideDrawable>() {
89 public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
90 pbLoading.setVisibility(View.GONE);
91 tvLoading.setVisibility(View.GONE);
92 btnRetry.setVisibility(View.VISIBLE);
97 public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
98 pbLoading.setVisibility(View.GONE);
99 tvLoading.setVisibility(View.GONE);