package me.nereo.baiduimageview.ui.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import me.nereo.baiduimageview.R;
import me.nereo.baiduimageview.model.Image;
/**
* Created by Administrator on 2014-07-07.
*/
public class ImageGridAdapter extends BaseAdapter {
private List<Image> images = new ArrayList<Image>();
private LayoutInflater mInflater;
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions options;
private int itemWidth;
private FrameLayout.LayoutParams mImageLayoutParams;
private ImageLoadingListener animateFirstListener;
private Drawable mDefaultImageDrawable = new ColorDrawable(Color.argb(255, 201, 201, 201));
public ImageGridAdapter(Context ctx){
mInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
options = new DisplayImageOptions.Builder()
//.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
mImageLayoutParams = new
FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
animateFirstListener = new AnimateFirstDisplayListener();
}
public void setData(List<Image> images){
if(images.size()>0){
images.remove(images.size()-1);
}
this.images.addAll(images);
//this.images = images;
notifyDataSetChanged();
}
public List<Image> getData(){
return images;
}
public void clearData(){
if(images.size() > 0)
images.clear();
notifyDataSetChanged();
}
@Override
public int getCount() {
return images.size();
}
@Override
public Object getItem(int i) {
return images.get(i);
}
@Override
public long getItemId(int i) {
return Long.valueOf(images.get(i).getId());
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder;
if(view != null){
holder = (ViewHolder) view.getTag();
}else{
view = mInflater.inflate(R.layout.item_image_grid, viewGroup, false);
holder = new ViewHolder();
holder.imageView = (ImageView) view.findViewById(R.id.image);
holder.textView = (TextView) view.findViewById(R.id.text);
holder.albumNum = (TextView) view.findViewById(R.id.albumNum);
view.setTag(holder);
}
Image img = (Image) getItem(i);
if(img != null){
if(img.getAlbumNum() > 1){
if(holder.albumNum.getVisibility() != View.VISIBLE)
holder.albumNum.setVisibility(View.VISIBLE);
holder.albumNum.setText(String.valueOf(img.getAlbumNum()));
}else{
if(holder.albumNum.getVisibility() != View.GONE)
holder.albumNum.setVisibility(View.GONE);
}
int imageHeight = 0;
if(holder.imageView.getLayoutParams().height != imageHeight){
double ratio;
if(img.getImageWidth() == null || img.getImageHeight() == null){
ratio = 1;
}else{
ratio = (double)img.getImageHeight() / (double)img.getImageWidth();
// System.out.println("iWidth: "+img.getImageWidth()+";iHeight: "+img.getImageHeight()+";"+"ratio: "+ratio);
}
imageHeight = (int) ( itemWidth*ratio );
mImageLayoutParams = new FrameLayout.LayoutParams(itemWidth, imageHeight);
// System.out.println("height1: "+imageHeight+"; width1:"+itemWidth);
}
holder.imageView.setLayoutParams(mImageLayoutParams);
Bitmap bm = Bitmap.createBitmap(holder.imageView.getLayoutParams().width, holder.imageView.getLayoutParams().height, Bitmap.Config.RGB_565);
holder.imageView.setImageBitmap(bm);
//holder.imageView.setImageDrawable(mDefaultImageDrawable);
//System.out.println("height: "+holder.imageView.getLayoutParams().height+"; width:"+holder.imageView.getLayoutParams().width);
imageLoader.displayImage(img.getImageUrl(), holder.imageView, options, animateFirstListener);
holder.textView.setText(img.getTitle());
}
return view;
}
public void setItemWidth(int width){
if(itemWidth == width) return;
itemWidth = width;
mImageLayoutParams = new
FrameLayout.LayoutParams(width, FrameLayout.LayoutParams.MATCH_PARENT);
notifyDataSetChanged();
}
static class ViewHolder{
ImageView imageView;
TextView textView;
TextView albumNum;
}
private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener{
static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if(loadedImage != null){
ImageView iv = (ImageView) view;
if(!displayedImages.contains(imageUri)) {
FadeInBitmapDisplayer.animate(iv, 500);
displayedImages.add(imageUri);
}
}
}
}
}