package com.wisedu.scc.love.widget.gallery;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.wisedu.scc.love.R;
import com.wisedu.scc.love.utils.BitmapUtil;
import java.util.List;
public class PhotoActivity extends Activity implements OnClickListener,
ViewPager.OnPageChangeListener {
private static final String TAG = "PhotoActivity";
public static final String IMAGES = "IMAGES";
public static final String IMAGE_POSITION = "IMAGE_POSITION";
private static final String STATE_POSITION = "STATE_POSITION";
private static final int PAGER_MARGIN_DP = 30;
private ImageLoader mImageLoader = ImageLoader.getInstance();
private DisplayImageOptions mOptions;
private ViewPager mViewPager;
private int mPosition;
private boolean mPaused;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(onReturnContentLayout());
Bundle bundle = getIntent().getExtras();
String[] imageUrls = null;
try {
imageUrls = bundle.getStringArray(IMAGES);
List<String> list = bundle.getStringArrayList(IMAGES);
if(list != null) {
imageUrls = new String[list.size()];
list.toArray(imageUrls);
}
} catch(Exception e) {
//INGORE
}
int pagerPosition = bundle.getInt(IMAGE_POSITION, 0);
if (savedInstanceState != null) {
pagerPosition = savedInstanceState.getInt(STATE_POSITION);
}
mOptions = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.resetViewBeforeLoading(true).cacheOnDisc(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.displayer(new FadeInBitmapDisplayer(300)).build();
mViewPager = (ViewPager) findViewById(R.id.viewPager);
mViewPager.setPageMargin(PAGER_MARGIN_DP);
mViewPager.setPageMarginDrawable(new ColorDrawable(Color.BLACK));
mViewPager.setAdapter(new SamplePagerAdapter(getApplicationContext(),
mImageLoader, mOptions, imageUrls));
mViewPager.setOnPageChangeListener(this);
mViewPager.setCurrentItem(pagerPosition);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_POSITION, mPosition);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mPosition = savedInstanceState.getInt(STATE_POSITION);
mViewPager.setCurrentItem(mPosition);
}
protected int onReturnContentLayout() {
return R.layout.viewpager;
}
@Override
public void onStart() {
super.onStart();
mPaused = false;
}
@Override
public void onStop() {
super.onStop();
mPaused = true;
}
@Override
public boolean dispatchTouchEvent(MotionEvent m) {
if (mPaused)
return true;
return super.dispatchTouchEvent(m);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onClick(View v) {
}
static class SamplePagerAdapter extends PagerAdapter implements
ImageLoadingListener {
private Context context;
private ImageLoader imageLoader;
private DisplayImageOptions options;
private LayoutInflater inflater;
private String[] imageUrls;
private Handler handler = new Handler();
public SamplePagerAdapter(Context context, ImageLoader imageLoader,
DisplayImageOptions options, String[] imageUrls) {
this.context = context;
this.imageLoader = imageLoader;
this.options = options;
this.imageUrls = imageUrls;
this.inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return imageUrls.length;
}
@Override
public View instantiateItem(ViewGroup container, int position) {
View imageLayout = inflater.inflate(R.layout.viewimage, container,
false);
PhotoView photoView = (PhotoView) imageLayout
.findViewById(R.id.image);
ProgressBar spinner = (ProgressBar) imageLayout
.findViewById(R.id.loading);
photoView.setTag(spinner);
/* imageLoader.decoderImage(imageUrls[position], photoView, options,
this);*/
container.addView(imageLayout, 0);
return imageLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void onLoadingStarted(String imageUri, View view) {
if(view == null) return;
ProgressBar spinner = (ProgressBar) view.getTag();
spinner.setVisibility(View.VISIBLE);
view.setVisibility(View.GONE);
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
String message = null;
switch (failReason.getType()) {
case IO_ERROR:
message = "Input/Output error";
break;
case DECODING_ERROR:
message = "Image can't be decoded";
break;
case NETWORK_DENIED:
message = "Downloads are denied";
break;
case OUT_OF_MEMORY:
message = "Out Of Memory error";
break;
case UNKNOWN:
message = "Unknown error";
break;
}
Log.w(TAG, "imageUri = " + imageUri + " message = " + message);
ProgressBar spinner = (ProgressBar) view.getTag();
spinner.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage) {
if(view == null) return;
PhotoView photoView = ((PhotoView) view);
ProgressBar spinner = (ProgressBar) photoView.getTag();
spinner.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
if(view == null) return;
ProgressBar spinner = (ProgressBar) view.getTag();
spinner.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
this.mPosition = position;
}
static class Decode extends Thread {
private View view;
private Object object;
private Handler handler;
public Decode(View view, Object object, Handler handler) {
this.view = view;
this.object = object;
this.handler = handler;
}
@Override
public void run() {
BitmapFactory.Options options = new BitmapFactory.Options();
BitmapUtil.configOptions(options, Bitmap.Config.ARGB_8888);
BitmapUtil.sampleOptions(options, object);
Bitmap[] bitmaps = BitmapUtil.decodeBitmaps(object, options);
handler.post(new Display(view, bitmaps));
}
}
static class Display implements Runnable {
private View view;
private Bitmap[] bitmaps;
public Display(View view, Bitmap[] bitmaps) {
this.view = view;
this.bitmaps = bitmaps;
}
@Override
public void run() {
PhotoView photoView = ((PhotoView) view);
ProgressBar spinner = (ProgressBar) photoView.getTag();
photoView.setSplitedBitmaps(bitmaps);
spinner.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
}
}
}