package com.mfh.comna.utils.sdimage; import android.app.Activity; import android.graphics.BitmapFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import com.mfh.comna.R; import com.mfh.comna.view.img.FineImgView; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2014/10/21. * 图片列表的adapter */ public class GridAdapter extends BaseAdapter { public static final String DATA_IMAGE = "imageList"; protected int width; private LayoutInflater inflater; protected Activity context; protected List<Image> images; protected List<String> checkImages; public GridAdapter(Activity context, List<Image> images, List<String> checkImages) { this.inflater = LayoutInflater.from(context); this.context = context; WindowManager wm = context.getWindowManager(); width = wm.getDefaultDisplay().getWidth(); this.images = images; this.checkImages = checkImages; } @Override public int getCount() { return images.size() + 1; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View view, ViewGroup parent) { ViewHolder holder; if (view == null) { holder = new ViewHolder(); // 获取行布局,对行布局中的控件进行设置赋值 view = inflater.inflate(R.layout.list_image_item, null); holder.image = (FineImgView) view.findViewById(R.id.image); holder.imageCb = (CheckBox) view.findViewById(R.id.image_cb); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } // 注意这里uri的使用,可以直接使用uri地址来构建一个image图片 ViewGroup.LayoutParams params = holder.image.getLayoutParams(); params.width = width/3; params.height = width/3; holder.image.setLayoutParams(params); fillData(position, holder); return view; } @Override public int getItemViewType(int position) { if(position == 0) return 0; else return 1; } @Override public int getViewTypeCount() { return 2; } protected void fillData(final int position, final ViewHolder holder) { if (position == 0) { holder.image.getImageView().setImageBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_button_add)); holder.imageCb.setVisibility(View.GONE); } else { holder.image.getImageView().setImageResource(R.drawable.default_list_image); // cacheUtil.display(holder.image,images.get(position - 1).getPath()); holder.image.setFao(FineImgView.getHeadImgFao()); holder.image.setNeedSample(true); holder.image.setMaxWidth(width/9); holder.image.setSrc(images.get(position - 1).getPath()); holder.imageCb.setVisibility(View.VISIBLE); holder.imageCb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { images.get(position - 1).setCheck(isChecked); if (isChecked) { holder.imageCb.setBackgroundResource(R.drawable.checkbox_select); if (checkImages != null) { if (!checkImages.contains(images.get(position - 1).getPath())) checkImages.add(images.get(position - 1).getPath()); } } else { holder.imageCb.setBackgroundResource(R.drawable.checkbox_normal); if (checkImages != null) { if (checkImages.contains(images.get(position - 1).getPath())) checkImages.remove(images.get(position - 1).getPath()); } } } }); holder.imageCb.setChecked(images.get(position - 1).isCheck()); } } public void addData(Image image) { for (Image image1 : images){ if (image1.getPath().equals(image.getPath())) return; } images.add(image); } public void addData(List<Image> images) { images.addAll(images); } public void removeData(String path) { List<Image> tempImages = images; for (Image image1 : images) { if (image1.getPath().equals(path)) { tempImages.remove(image1); } } images = tempImages; } public void removeData(List<String> paths) { List<Image> tempImages = new ArrayList<Image>(); for (String path : paths) { for (Image image1 : images) { if (image1.getPath().equals(path)) { tempImages.add(image1); } } } images.removeAll(tempImages); } protected static class ViewHolder { public CheckBox imageCb; public FineImgView image; } }