package com.example.administrator.searchpicturetool.detail; import android.app.Activity; import android.graphics.Bitmap; import android.os.Handler; import android.support.v4.view.PagerAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.administrator.searchpicturetool.R; import com.example.administrator.searchpicturetool.widght.imageLoader.EasyImageLoader; import com.example.administrator.searchpicturetool.model.SaveBitmapModel; import com.example.administrator.searchpicturetool.model.bean.NetImage; import com.example.administrator.searchpicturetool.widght.PinchImageView; import com.example.administrator.searchpicturetool.widght.PinchImageViewPager; import com.facebook.common.executors.CallerThreadExecutor; import com.facebook.common.references.CloseableReference; import com.facebook.datasource.DataSource; import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber; import com.facebook.imagepipeline.image.CloseableImage; import com.jude.utils.JUtils; import com.pnikosis.materialishprogress.ProgressWheel; import java.util.ArrayList; /** * Created by wenhuaijun on 2015/11/8 0008. */ public class ShowLargeImgAdapter extends PagerAdapter implements View.OnClickListener { ViewGroup.LayoutParams mLayoutParams; private ArrayList<NetImage> netImages; private Activity context; private LayoutInflater inflater; private int screenHeight; private int screenWidth; private View view; private int currentPosition = -1; private PinchImageViewPager mPinchImageViewPager; public ShowLargeImgAdapter(ArrayList<NetImage> netImages, Activity context) { this.netImages = netImages; this.context = context; screenHeight = JUtils.getScreenHeight(); screenWidth = JUtils.getScreenWidth(); inflater = LayoutInflater.from(context); } @Override public int getCount() { if(netImages==null){ return 0; } return netImages.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // super.destroyItem(container, position, object); container.removeView((View) object); } @Override public Object instantiateItem(ViewGroup container, int position) { view = inflater.inflate(R.layout.item_large_img, null); if(netImages==null||netImages.get(position)==null){ container.addView(view); return view; } PinchImageView pinchImageView = (PinchImageView) view.findViewById(R.id.photoView); ProgressWheel progressWheel = (ProgressWheel)view.findViewById(R.id.progress_wheel); pinchImageView.setOnClickListener(this); //加载低分辨率图片 DataSource<CloseableReference<CloseableImage>> dataSource =SaveBitmapModel. getFrescoCacheBitmap(context, netImages.get(position).getThumbImg()); if(dataSource!=null){ //fresco含有缓存时直接现在缩略图 progressWheel.setVisibility(View.VISIBLE); dataSource.subscribe(new BaseBitmapDataSubscriber() { @Override protected void onNewResultImpl(Bitmap bitmap) { if (pinchImageView != null) { if(bitmap!=null){ pinchImageView.post(new Runnable() { @Override public void run() { pinchImageView.setImageBitmap(bitmap); } }); } } } @Override protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) { JUtils.Log("请求缩略图bitmap失败"); } }, CallerThreadExecutor.getInstance()); }else { progressWheel.setVisibility(View.VISIBLE); } container.addView(view); return view; } @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { super.setPrimaryItem(container, position, object); if (currentPosition != position&&object!=null) { currentPosition = position; if(netImages==null||netImages.get(position)==null){ return; } PinchImageView pinchImageView = (PinchImageView) (((View) object).findViewById(R.id.photoView)); ProgressWheel progressWheel = (ProgressWheel) (((View) object).findViewById(R.id.progress_wheel)); if (pinchImageView.getTag() == null || !pinchImageView.getTag().equals(netImages.get(position).getLargeImg())) { pinchImageView.setTag(netImages.get(position).getLargeImg()); EasyImageLoader.getInstance(context).getBitmap(netImages.get(position).getLargeImg(), bitmap -> { if(bitmap!=null){ if(progressWheel.isShown()){ progressWheel.setVisibility(View.GONE); } pinchImageView.setImageBitmap(bitmap); }else { if(progressWheel.isShown()){ progressWheel.setVisibility(View.GONE); new Handler().postDelayed(new Runnable() { @Override public void run() { if(pinchImageView.getDrawable()==null){ EasyImageLoader.getInstance(context).bindBitmap(netImages.get(position).getThumbImg(), pinchImageView); } } },200); } toastErrorMessage(); } }); } if (getPinchImageViewPager() != null && pinchImageView != null) { getPinchImageViewPager().setMainPinchImageView(pinchImageView); } } } @Override public void onClick(View v) { context.finish(); } public PinchImageViewPager getPinchImageViewPager() { return mPinchImageViewPager; } public void setPinchImageViewPager(PinchImageViewPager mPinchImageViewPager) { this.mPinchImageViewPager = mPinchImageViewPager; } public void toastErrorMessage(){ if(JUtils.isNetWorkAvilable()){ JUtils.Toast("该图没有高清图..."); }else { JUtils.Toast("网络不给力,无法加载高清图"); } } }