package com.andbase.demo.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.andbase.demo.R;
import com.andbase.demo.model.ImageUploadInfo;
import com.andbase.library.asynctask.AbTaskItem;
import com.andbase.library.asynctask.AbTaskObjectListener;
import com.andbase.library.asynctask.AbTaskQueue;
import com.andbase.library.cache.image.AbImageCacheImpl;
import com.andbase.library.image.AbImageLoader;
import com.andbase.library.util.AbImageUtil;
import com.andbase.library.util.AbStrUtil;
import com.andbase.library.util.AbViewUtil;
import com.andbase.library.view.draggrid.AbDragGridView;
import com.andbase.library.view.draggrid.AbDragGridViewAdapter;
import java.io.File;
import java.util.List;
public class DragPhotoGridViewAdapter extends AbDragGridViewAdapter {
/** 上下问. */
private Context context;
private AbDragGridView dragGridView;
/** 图片的路径. */
private List<ImageUploadInfo> images = null;
/** 图片宽度. */
private int width;
/** 图片高度. */
private int height;
/**图片下载器*/
private AbImageLoader imageLoader = null;
private AbTaskQueue task;
private AdapterView.OnItemClickListener onItemClickListener;
public DragPhotoGridViewAdapter(Context context, AbDragGridView dragGridView, List<ImageUploadInfo> images, int width, int height,AbImageLoader imageLoader) {
this.context = context;
this.images = images;
this.width = width;
this.height = height;
this.dragGridView = dragGridView;
this.imageLoader = imageLoader;
this.task = AbTaskQueue.newInstance();
}
@Override
public int getCount() {
return images.size();
}
@Override
public ImageUploadInfo getItem(int position) {
return images.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if(convertView == null){
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.item_drag_image, null);
holder.imageView = (ImageView) convertView.findViewById(R.id.image_view);
holder.deleteBtn = (Button) convertView.findViewById(R.id.delete_btn);
holder.parentLayout = (RelativeLayout) convertView.findViewById(R.id.parent_layout);
holder.parentLayout.setLayoutParams(new LinearLayout.LayoutParams(width, height));
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
final ImageUploadInfo imageUploadInfo = images.get(position);
if(imageUploadInfo.isCamBtn()){
holder.deleteBtn.setVisibility(View.INVISIBLE);
}else{
holder.deleteBtn.setVisibility(View.VISIBLE);
}
holder.deleteBtn.setFocusable(false);
holder.imageView.setFocusable(false);
/*holder.imageView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
if(onItemClickListener!=null){
onItemClickListener.onItemClick(null,view,position,position);
}
}
});*/
holder.deleteBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
images.remove(position);
//限制最大6个
if(containCam()==-1){
ImageUploadInfo imageUploadInfo1 = new ImageUploadInfo(String.valueOf(R.drawable.cam_photo));
imageUploadInfo1.setCamBtn(true);
addItem(getCount(),imageUploadInfo1);
}
AbViewUtil.setAbsListViewHeight(dragGridView,3,220,10);
notifyDataSetChanged();
}
});
holder.imageView.setImageBitmap(null);
//hide时隐藏Text
if(position != hidePosition) {
loadImage(position,holder);
}else{
holder.deleteBtn.setVisibility(View.INVISIBLE);
}
convertView.setId(position);
return convertView;
}
public void removeView(int pos) {
images.remove(pos);
notifyDataSetChanged();
}
//更新拖动时的gridView
public void swapView(int draggedPos, int destPos) {
//从前向后拖动,其他item依次前移
if(draggedPos < destPos) {
images.add(destPos+1, getItem(draggedPos));
images.remove(draggedPos);
}
//从后向前拖动,其他item依次后移
else if(draggedPos > destPos) {
images.add(destPos, getItem(draggedPos));
images.remove(draggedPos+1);
}
hidePosition = destPos;
notifyDataSetChanged();
}
/**
* 增加并改变视图.
* @param position the position
* @param imageUploadInfo the image paths
*/
public void addItem(int position,ImageUploadInfo imageUploadInfo) {
images.add(position,imageUploadInfo);
notifyDataSetChanged();
}
/**
* 增加多条并改变视图.
* @param imageUploadInfos the image paths
*/
public void addItems(List<ImageUploadInfo> imageUploadInfos) {
images.addAll(imageUploadInfos);
notifyDataSetChanged();
}
/**
* 改变视图.
* @param position the position
* @param imageUploadInfo the image paths
*/
public void setItem(int position,ImageUploadInfo imageUploadInfo) {
images.set(position,imageUploadInfo);
notifyDataSetChanged();
}
/**
* 增加多条并改变视图.
*/
public void clearItems() {
images.clear();
notifyDataSetChanged();
}
public int containCam(){
int pos = -1;
for(int i=0;i<images.size();i++){
ImageUploadInfo imageUploadInfo = images.get(i);
if(imageUploadInfo.isCamBtn()){
pos = i;
break;
}
}
return pos;
}
/**
* View元素.
*/
public static class ViewHolder {
public ImageView imageView;
public Button deleteBtn;
public RelativeLayout parentLayout;
public String imageTag;
}
public AdapterView.OnItemClickListener getOnItemClickListener() {
return onItemClickListener;
}
public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public void loadImage(final int position,final ViewHolder holder){
final ImageUploadInfo imageUploadInfo = images.get(position);
//AbLogUtil.e(this.context,position+"路径:"+image);
final String image = imageUploadInfo.getPath();
final String currentTag = image+"_"+position;
//设置标记
holder.imageTag = currentTag;
if(!AbStrUtil.isEmpty(image)){
if(image.indexOf("http://")!=-1){
//图片的下载
imageLoader.display(holder.imageView,image,this.width,this.height);
}else if(AbStrUtil.isNumber(image)){
//索引图片
try {
int res = Integer.parseInt(image);
holder.imageView.setImageDrawable(context.getResources().getDrawable(res));
} catch (Exception e) {
}
}else {
final AbTaskItem item = new AbTaskItem();
item.setPosition(position);
item.setListener(new AbTaskObjectListener() {
@Override
public <T> T getObject() {
Bitmap bitmap = AbImageUtil.getThumbnail(new File(image),width, height);
return (T) bitmap;
}
@Override
public <T> void update(T t) {
if (t == null) {
return;
}
Bitmap bitmap = (Bitmap) t;
if (currentTag.equals(holder.imageTag)) {
holder.imageView.setImageBitmap(bitmap);
//AbLogUtil.e("TAG", "显示:" + position+","+bitmap);
}
}
});
task.execute(item);
}
}
}
}