package com.ccxt.whl.adapter;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import com.ccxt.whl.R;
import com.ccxt.whl.domain.VideoEntity;
import com.ccxt.whl.task.AsyncImageLoader;
import com.easemob.util.DensityUtil;
public class ChooseVideoAdapter extends BaseAdapter {
private Context mContext;
private List<VideoEntity> videoList;
private GridView gridView;
private AsyncImageLoader asyncImageLoader;
// LruCache<String, Bitmap> mLruCache = new LruCache<String, Bitmap>(
// (int) (Runtime.getRuntime().maxMemory() / 16)) {
// @Override
// protected int sizeOf(String key, Bitmap value) {
// return value.getRowBytes() * value.getHeight();
// }
// };
public ChooseVideoAdapter(Context context, List<VideoEntity> videoList,
GridView gridView) {
this.mContext = context;
this.videoList = videoList;
this.gridView = gridView;
asyncImageLoader = new AsyncImageLoader();
this.gridView.setOnScrollListener(onScrollListener);
}
@Override
public int getCount() {
return videoList.size() + 1;
}
@Override
public VideoEntity getItem(int position) {
return (position == 0) ? null : videoList.get(position - 1);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(
R.layout.choose_griditem, null);
convertView.setLayoutParams(new GridView.LayoutParams(DensityUtil
.dip2px(mContext, 100), DensityUtil.dip2px(mContext, 100)));
holder.tv_duration = (TextView) convertView
.findViewById(R.id.chatting_length_iv);
holder.tv_size = (TextView) convertView
.findViewById(R.id.chatting_size_iv);
holder.videoImage = (ImageView) convertView
.findViewById(R.id.imageView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (position == 0) {
holder.videoImage.setImageResource(R.drawable.default_image);
} else {
final VideoEntity videoEntity = getItem(position);
holder.tv_duration.setText(videoEntity.duration + "");
holder.tv_size.setText(videoEntity.size + "");
holder.videoImage.setImageResource(R.drawable.default_image);
holder.videoImage.setTag(position);
asyncImageLoader.loadImage(position, videoEntity.filePath, imageLoadListener);
}
return convertView;
}
class ViewHolder {
TextView tv_size;
TextView tv_duration;
ImageView videoImage;
}
AsyncImageLoader.OnImageLoadListener imageLoadListener=new AsyncImageLoader.OnImageLoadListener() {
@Override
public void onImageLoad(Integer t, Bitmap bitmap) {
Log.d("log","posiIOn:"+t);
ImageView view=(ImageView) gridView.findViewWithTag(t);
if(view!=null)
{
view.setImageBitmap(bitmap);
}
}
@Override
public void onError(Integer t) {
Log.d("log","onerror:"+t);
VideoEntity entity=getItem(t);
ImageView view=(ImageView) gridView.findViewWithTag(entity);
if(view!=null)
{
view.setImageResource(R.drawable.default_image);
}
}
};
public void loadImage(){
int start=gridView.getFirstVisiblePosition();
int end=gridView.getLastVisiblePosition();
if(end>=getCount())
{
end=getCount()-1;
}
asyncImageLoader.setLoadLimit(start, end);
asyncImageLoader.unlock();
}
AbsListView.OnScrollListener onScrollListener=new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
asyncImageLoader.lock();
break;
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
loadImage();
break;
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
asyncImageLoader.lock();
break;
default:
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
};
}