package com.metis.base.fragment; import android.content.Intent; import android.os.Bundle; import android.os.Parcelable; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.metis.base.ActivityDispatcher; import com.metis.base.R; import com.metis.base.widget.ImagePreviewable; import java.io.File; import java.util.ArrayList; import java.util.List; import uk.co.senab.photoview.PhotoViewAttacher; /** * Created by Beak on 2015/7/20. */ public class MultiImagePreviewFragment extends BaseFragment implements ViewPager.OnPageChangeListener, SingleImagePreviewFragment.OnImageTabListener{ private ViewPager mViewPager = null; private SingleImagePreviewFragment[] mFragmentArray = null; private List<ImagePreviewable> mImages = null; private int mIndex = 0; private OnImageOperateListener mOperateListener = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_multi_image_preview, null, true); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mViewPager = (ViewPager)view.findViewById(R.id.preview_view_pager); mViewPager.addOnPageChangeListener(this); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Intent it = getActivity().getIntent(); final int index = it.getIntExtra(ActivityDispatcher.KEY_INDEX, 0); Parcelable[] parcelables = it.getParcelableArrayExtra(ActivityDispatcher.KEY_IMAGES); final int length = parcelables.length; List<ImagePreviewable> imagePreviewables = new ArrayList<ImagePreviewable>(); for (int i = 0; i < length; i++) { Parcelable parcelable = parcelables[i]; if (parcelable instanceof ImagePreviewable) { imagePreviewables.add((ImagePreviewable)parcelable); } } setImages(imagePreviewables, index); } @Override public void onDestroyView() { super.onDestroyView(); mViewPager.removeOnPageChangeListener(this); } public void setImages (List<ImagePreviewable> images) { setImages(images, 0); } public void setImages (List<ImagePreviewable> images, int index) { mImages = images; mIndex = index; if (mImages != null) { mFragmentArray = new SingleImagePreviewFragment[images.size()]; mViewPager.setAdapter(new PreviewAdapter(getChildFragmentManager())); mViewPager.setCurrentItem(index); if (index == 0) { onPageSelected(0); } } } public File getImageFile (int position) { return mFragmentArray[position].getImageFile(); } public File getCurrentImageFile () { return getImageFile(mViewPager.getCurrentItem()); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { Fragment fragment = ((PreviewAdapter)mViewPager.getAdapter()).getItem(position); ImagePreviewable previewable = mImages.get(position); ((SingleImagePreviewFragment) fragment).setImagePreviewable(previewable); if (mOperateListener != null) { mOperateListener.onPageChange(position, previewable); } } @Override public void onPageScrollStateChanged(int state) { } public void setOnOperateListener (OnImageOperateListener listener) { mOperateListener = listener; } @Override public void onImageTab(ImagePreviewable previewable) { if (mOperateListener != null) { mOperateListener.onPageTab(mViewPager.getCurrentItem(), previewable); } } @Override public void onImageLongClick(ImagePreviewable previewable, File cacheFile) { if (mOperateListener != null) { mOperateListener.onPageLongClick(mViewPager.getCurrentItem(), previewable, cacheFile); } } private class PreviewAdapter extends FragmentStatePagerAdapter { public PreviewAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { SingleImagePreviewFragment fragment = mFragmentArray[position]; if (fragment == null) { mFragmentArray[position] = new SingleImagePreviewFragment(); mFragmentArray[position].setImagePreviewable(mImages.get(position)); mFragmentArray[position].setOnImageTabListener(MultiImagePreviewFragment.this); } return mFragmentArray[position]; } @Override public int getCount() { return mImages.size(); } } public static interface OnImageOperateListener { public void onPageChange (int position, ImagePreviewable image); public void onPageTab (int position, ImagePreviewable image); public void onPageLongClick (int position, ImagePreviewable image, File cacheFile); } }