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.BaseAdapter; 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.image.AbImageLoader; import com.andbase.library.util.AbFileUtil; import com.andbase.library.util.AbImageUtil; import com.andbase.library.util.AbStrUtil; import java.io.File; import java.util.List; /** * Copyright amsoft.cn * Author 还如一梦中 * Date 2016/6/16 13:27 * Email 396196516@qq.com * Info 适配器 网络URL的图片和本地,资源文件图片显示. */ public class ImageUploadAdapter extends BaseAdapter { /** 上下问. */ private Context context; /** 图片的路径. */ private List<ImageUploadInfo> images = null; /** 图片宽度. */ private int width; /** 图片高度. */ private int height; /**图片下载器*/ private AbImageLoader imageLoader = null; private AbTaskQueue task; private AdapterView.OnItemClickListener onItemClickListener; public ImageUploadAdapter(Context context, List<ImageUploadInfo> images, int width, int height,AbImageLoader imageLoader) { this.context = context; this.images = images; this.width = width; this.height = height; this.imageLoader = imageLoader; this.task = AbTaskQueue.newInstance(); } /** * 获取数量. * @return the count */ public int getCount() { return images.size(); } /** * 获取索引位置的路径. * @param position the position * @return the item */ public Object getItem(int position) { return images.get(position); } /** * 获取位置. * @param position the position * @return the item id */ public long getItemId(int position) { return position; } /** * 显示View. * @param position the position * @param convertView the convert view * @param parent the parent * @return the view */ 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_upload_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(); } holder.imageView.setImageBitmap(null); holder.deleteBtn.setVisibility(View.INVISIBLE); holder.imageView.setFocusable(false); holder.deleteBtn.setFocusable(false); holder.deleteBtn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { images.remove(position); notifyDataSetChanged(); } }); loadImage(position,holder.imageView); return convertView; } /** * 增加并改变视图. * @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(); } /** * 增加多条并改变视图. */ public void clearItems() { images.clear(); notifyDataSetChanged(); } /** * View元素. */ public static class ViewHolder { public ImageView imageView; public Button deleteBtn; public RelativeLayout parentLayout; } public AdapterView.OnItemClickListener getOnItemClickListener() { return onItemClickListener; } public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public void loadImage(final int position,final ImageView imageView){ final ImageUploadInfo imageUploadInfo = images.get(position); //AbLogUtil.e(this.context,position+"路径:"+image); final String image = imageUploadInfo.getPath(); final String currentTag = image+"_"+position; //设置标记 imageView.setTag(R.id.image_view,currentTag); if(!AbStrUtil.isEmpty(image)){ if(image.indexOf("http://")!=-1){ //图片的下载 imageLoader.display(imageView,image,this.width,this.height); }else if(AbStrUtil.isNumber(image)){ //索引图片 try { int res = Integer.parseInt(image); 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 = AbFileUtil.getBitmapFromSD(new File(image), AbImageUtil.CUTIMG, width, height); return (T) bitmap; } @Override public <T> void update(T t) { if(t == null){ return; } Bitmap bitmap = (Bitmap) t; String oldTag = (String)imageView.getTag(R.id.image_view); if (currentTag.equals(oldTag)) { imageView.setImageBitmap(bitmap); } } }); task.execute(item); } } } }