android写一个图片选择
publicclassImageAdapter extends ListItemAdapter
{privatebooleanselect=false;publicvoidopen(intposisiont) {select=true;
booleanArray.put(posisiont,true);if(onImageCheckListener !=null)
onImageCheckListener.onImageCheck(true);this.notifyDataSetChanged();
}publicvoidclose() {select=false;
booleanArray.clear();
notifyDataSetChanged();
}//position//HashMap<Integer, Boolean> map = new HashMap<>();privateSparseBooleanArray booleanArray =newSparseBooleanArray();publicSparseBooleanArraygetBooleanArray() {returnbooleanArray;
}publicImageAdapter(Context context, List list) {
super(context, list);
}
@OverridepublicintgetCount() {//多出来的就是照相机returnsuper.getCount() +1;
}// @Override// public View getView(int position, View convertView, ViewGroup parent) {// if (convertView == null) {// ImageView iv = new ImageView(mContext);// iv.setScaleType(ImageView.ScaleType.CENTER_CROP);// iv.setBackgroundColor(Color.argb(0xFF, 0x07, 0x05, 0x18));// int width = mContext.getResources().getDisplayMetrics().widthPixels / 3 - 2;// GridView.LayoutParams params = new GridView.LayoutParams(width, width);// iv.setPadding(2, 2, 2, 2);// iv.setLayoutParams(params);// convertView = iv;// }// ImageView iv = (ImageView) convertView;// if (position == 0) {// //照相机// iv.setImageResource(R.mipmap.camera);// } else {// iv.setImageURI(Uri.fromFile(getItem(position - 1)));// }// return convertView;// }@OverridepublicViewgetView(finalintposition, View convertView, ViewGroup parent) {
ViewHolder holder;if(convertView ==null) {
convertView = View.inflate(mContext, R.layout.item_image,null);
holder =newViewHolder(convertView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}if(position ==0) {
holder.image.setImageResource(R.mipmap.camera);
holder.checkBox.setVisibility(View.GONE);
}else{
holder.image.setImageURI(Uri.fromFile(getItem(position -1)));if(select) {
holder.checkBox.setVisibility(View.VISIBLE);//当前的需不需要勾选呢//nullBoolean b = booleanArray.get(position);if(b ==null|| b ==false) {
holder.checkBox.setChecked(false);
}else{
holder.checkBox.setChecked(true);
}//item点击和布局冲突holder.checkBox.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View v) {
Boolean b = booleanArray.get(position);if(b ==null|| b ==false)
b =true;elseb =false;
booleanArray.put(position, b);//判断所有的boolean,如果已经没有一个true 关闭for(inti =0; i < booleanArray.size(); i++) {//4-true 0==false//两个值 key -- > 3 4// 0 1 2 3 4 5boolean isChecked = booleanArray.get(booleanArray.keyAt(i));
Log.e("TAG","----"+ isChecked);
Log.e("TAG", booleanArray.toString());if(isChecked) {//有被勾选的值if(onImageCheckListener !=null)
onImageCheckListener.onImageCheck(true);return;
}
}if(onImageCheckListener !=null)
onImageCheckListener.onImageCheck(false);//没有被勾选的值了//关闭close();
}
});
}else{
holder.checkBox.setVisibility(View.GONE);
}//不能使用onCheck// holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {// @Override// public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {// booleanArray.put(position, isChecked);// }// });}returnconvertView;
}//回调方法。//写在需要执行方法的地方//他实现 在需要返回的地方publicinterfaceOnImageCheckListener {publicvoidonImageCheck(boolean b);
}privateOnImageCheckListener onImageCheckListener;//alt+insertpublicvoidsetOnImageCheckListener(OnImageCheckListener onImageCheckListener) {this.onImageCheckListener = onImageCheckListener;
}
class ViewHolder {
ImageView image;
CheckBox checkBox;publicViewHolder(View convertView) {
image = (ImageView) convertView.findViewById(R.id.iv_image);intwidth = mContext.getResources().getDisplayMetrics().widthPixels /3-2;
RelativeLayout.LayoutParamsparams=newRelativeLayout.LayoutParams(width, width);
image.setLayoutParams(params);
checkBox = (CheckBox) convertView.findViewById(R.id.cb_check);
}
}
}
来源: