package com.metis.base.fragment; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import com.lidroid.xutils.HttpUtils; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.ResponseInfo; import com.lidroid.xutils.http.callback.RequestCallBack; import com.metis.base.R; import com.metis.base.manager.CacheManager; import com.metis.base.manager.DisplayManager; import com.metis.base.utils.FileUtils; import com.metis.base.widget.ImagePreviewable; import java.io.File; import uk.co.senab.photoview.PhotoView; import uk.co.senab.photoview.PhotoViewAttacher; /** * Created by Beak on 2015/7/20. */ public class SingleImagePreviewFragment extends BaseFragment implements PhotoViewAttacher.OnViewTapListener, View.OnLongClickListener { private PhotoView mPhotoView = null; private ProgressBar mProgressBar = null; private ImagePreviewable mPreviewable = null; private OnImageTabListener mTabListener = null; private File mImageFile = null; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate (R.layout.fragment_single_image_preview, null, true); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mPhotoView = (PhotoView)view.findViewById(R.id.preview_photo_view); mProgressBar = (ProgressBar)view.findViewById(R.id.preview_progress_bar); setImagePreviewable(mPreviewable); mPhotoView.setOnViewTapListener(this); mPhotoView.setOnLongClickListener(this); } @Override public void onDestroyView() { super.onDestroyView(); mPhotoView.setOnViewTapListener(null); mPhotoView.setOnLongClickListener(null); } public void setOnImageTabListener (OnImageTabListener listener) { mTabListener = listener; } public ImagePreviewable getPreviewable () { return mPreviewable; } public File getImageFile () { return mImageFile; } public void setImagePreviewable (ImagePreviewable previewable) { mPreviewable = previewable; if (mPhotoView != null && previewable != null) { mImageFile = new File(CacheManager.getInstance(getActivity()).getCacheFolder("temp"), FileUtils.getNameFromUrl(previewable.getUrl())); if (mImageFile.exists()) { Bitmap bmp = BitmapFactory.decodeFile(mImageFile.getAbsolutePath()); mPhotoView.setImageBitmap(bmp); } else { DisplayManager.getInstance(getActivity()).display( previewable.getThumbnail(), mPhotoView); HttpUtils httpUtils = new HttpUtils(1000 * 10); mProgressBar.setVisibility(View.VISIBLE); mPhotoView.setZoomable(false); httpUtils.download( previewable.getUrl(), mImageFile.getAbsolutePath(), true, true, new RequestCallBack<File>() { @Override public void onSuccess(ResponseInfo<File> responseInfo) { if (!isAlive()) { return; } mProgressBar.setVisibility(View.GONE); mPhotoView.setZoomable(true); Bitmap bmp = BitmapFactory.decodeFile(responseInfo.result.getAbsolutePath()); mPhotoView.setImageBitmap(bmp); } @Override public void onFailure(HttpException e, String s) { if (!isAlive()) { return; } mProgressBar.setVisibility(View.GONE); mPhotoView.setImageResource(R.drawable.image_broken); } }); } } } @Override public void onViewTap(View view, float x, float y) { if (mTabListener != null) { mTabListener.onImageTab(mPreviewable); } } @Override public boolean onLongClick(View v) { if (mTabListener != null) { mTabListener.onImageLongClick(mPreviewable, mImageFile); } return false; } public static interface OnImageTabListener { public void onImageTab (ImagePreviewable previewable); public void onImageLongClick (ImagePreviewable previewable, File cacheFile); } }