前段时间整理项目,把图片选择器分出来整理成了moudle,现分享出来供大家参考。
首先上图
首先要将图片宽高一致
public class SquareLayout extends RelativeLayout {
public SquareLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public SquareLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareLayout(Context context) {
super(context);
}
@SuppressWarnings("unused")
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));
// Children are just made to fill our space.
int childWidthSize = getMeasuredWidth();
int childHeightSize = getMeasuredHeight();
//高度和宽度一样
heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
在以上自定义布局中定义图片大小
导入base.jar,实现TrustyGridSimpleAdapter中getheaderView方法来添加时间戳
public class ImageAdapter extends BaseAdapter implements TrustyGridSimpleAdapter {
private Context mContext;
private ArrayList<ImageItem> fileInfo;
private ArrayList<ImageItem> selectedDataList;
private DisplayMetrics dm;
public ImageAdapter(Context mContext, ArrayList<ImageItem> fileInfo, ArrayList<ImageItem> selectedDataList) {
this.mContext = mContext;
this.fileInfo = fileInfo;
this.selectedDataList = selectedDataList;
dm = new DisplayMetrics();
((Activity) mContext).getWindowManager().getDefaultDisplay()
.getMetrics(dm);
}
public void setData(ArrayList<ImageItem> fileInfo) {
this.fileInfo = fileInfo;
}
@Override
public int getCount() {
int count = 0;
if (fileInfo != null && fileInfo.size() > 0) {
count = fileInfo.size();
}
return count;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
class ViewHolder {
ImageView ivImage;
public CheckBox isSelect;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = View.inflate(mContext, R.layout.item_image, null);
viewHolder.ivImage = (ImageView) convertView.findViewById(R.id.iv_image);
viewHolder.isSelect = (CheckBox) convertView
.findViewById(R.id.isSelect);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final ImageItem item = fileInfo.get(position);
if (item.isCamera) {
viewHolder.isSelect.setVisibility(View.GONE);
// ImageLoader.getInstance().displayImage("drawable://"+R.drawable.ic_camera,
// holder.img);
viewHolder.ivImage.setImageResource(R.drawable.ic_camera);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mOnItemClickListener.onCameraClick();
}
});
return convertView;
} else {
viewHolder.isSelect.setVisibility(View.VISIBLE);
}
if (fileInfo != null && fileInfo.size() > 0) {
File file = new File(fileInfo.get(position).imagePath);
Glide.with(mContext).load(file)
.into(viewHolder.ivImage);
}
/*for (int i = 0; i < selectedDataList.size(); i++) {
if (selectedDataList.get(i).getImagePath().equals(fileInfo.get(position).getImagePath())) {
viewHolder.isSelect.setChecked(true);
} else {
}
}*/
final CheckBox isSelectBox = viewHolder.isSelect;
viewHolder.isSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (fileInfo != null && mOnItemClickListener != null
&& position < fileInfo.size()) {
mOnItemClickListener.onSelectClick(position,
isSelectBox.isChecked(), isSelectBox);
}
}
});
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (fileInfo != null && mOnItemClickListener != null
&& position < fileInfo.size()) {
mOnItemClickListener.onItemClick(position,
isSelectBox.isChecked(), isSelectBox, fileInfo.get(position));
}
}
});
return convertView;
}
class HeaderViewHolder {
public TextView tvTimeHeader;
}
@Override
public View getHeaderView(final int position, View convertView, ViewGroup viewGroup) {
HeaderViewHolder mHeadViewHolder = null;
if (convertView == null) {
mHeadViewHolder = new HeaderViewHolder();
convertView = View.inflate(mContext, R.layout.item_time_header, null);
mHeadViewHolder.tvTimeHeader = (TextView) convertView.findViewById(R.id.tv_time_header);
convertView.setTag(mHeadViewHolder);
} else {
mHeadViewHolder = (HeaderViewHolder) convertView.getTag();
}
if (position == 0) {
mHeadViewHolder.tvTimeHeader.setText("拍照");
} else {
mHeadViewHolder.tvTimeHeader.setText(fileInfo.get(position).getDate());
}
return convertView;
}
@Override
public long getHeaderId(int i) {
// File file = new File(fileInfo.get(i).getFilePath());
return getTimeId(fileInfo.get(i).getDate());
// return getTimeId(strToDateLong(file.lastModified()));
}
public long getTimeId(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Date mDate = null;
try {
mDate = sdf.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mDate.getTime();
}
public String strToDateLong(long time) {
Date date = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
return sdf.format(date);
}
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener l) {
mOnItemClickListener = l;
}
public interface OnItemClickListener {
public void onSelectClick(int position, boolean isChecked,
CheckBox checkBox);
public void onItemClick(int position, boolean isChecked,
CheckBox checkBox, ImageItem imageItem);
public void onCameraClick();
}
}