package com.marshalchen.common.uimodule.multi_image_selector.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import com.marshalchen.common.uimodule.multi_image_selector.bean.Image;
import com.marshalchen.ultimateandroiduicomponent.R;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* 图片Adapter
* Created by Nereo on 2015/4/7.
*/
public class ImageGridAdapter extends BaseAdapter {
private static final int TYPE_CAMERA = 0;
private static final int TYPE_NORMAL = 1;
private Context mContext;
private LayoutInflater mInflater;
private boolean showCamera = true;
private boolean showSelectIndicator = true;
private List<Image> mImages = new ArrayList<>();
private List<Image> mSelectedImages = new ArrayList<>();
private int mItemSize;
private GridView.LayoutParams mItemLayoutParams;
public ImageGridAdapter(Context context, boolean showCamera){
mContext = context;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.showCamera = showCamera;
mItemLayoutParams = new GridView.LayoutParams(GridView.LayoutParams.MATCH_PARENT, GridView.LayoutParams.MATCH_PARENT);
}
/**
* 显示选择指示器
* @param b
*/
public void showSelectIndicator(boolean b) {
showSelectIndicator = b;
}
public void setShowCamera(boolean b){
if(showCamera == b) return;
showCamera = b;
notifyDataSetChanged();
}
public boolean isShowCamera(){
return showCamera;
}
/**
* 选择某个图片,改变选择状态
* @param image
*/
public void select(Image image) {
if(mSelectedImages.contains(image)){
mSelectedImages.remove(image);
}else{
mSelectedImages.add(image);
}
notifyDataSetChanged();
}
/**
* 通过图片路径设置默认选择
* @param resultList
*/
public void setDefaultSelected(ArrayList<String> resultList) {
for(String path : resultList){
Image image = getImageByPath(path);
if(image != null){
mSelectedImages.add(image);
}
}
if(mSelectedImages.size() > 0){
notifyDataSetChanged();
}
}
private Image getImageByPath(String path){
if(mImages != null && mImages.size()>0){
for(Image image : mImages){
if(image.path.equalsIgnoreCase(path)){
return image;
}
}
}
return null;
}
/**
* 设置数据集
* @param images
*/
public void setData(List<Image> images) {
mSelectedImages.clear();
if(images != null && images.size()>0){
mImages = images;
}else{
mImages.clear();
}
notifyDataSetChanged();
}
/**
* 重置每个Column的Size
* @param columnWidth
*/
public void setItemSize(int columnWidth) {
if(mItemSize == columnWidth){
return;
}
mItemSize = columnWidth;
mItemLayoutParams = new GridView.LayoutParams(mItemSize, mItemSize);
notifyDataSetChanged();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if(showCamera){
return position==0 ? TYPE_CAMERA : TYPE_NORMAL;
}
return TYPE_NORMAL;
}
@Override
public int getCount() {
return showCamera ? mImages.size()+1 : mImages.size();
}
@Override
public Image getItem(int i) {
if(showCamera){
if(i == 0){
return null;
}
return mImages.get(i-1);
}else{
return mImages.get(i);
}
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int type = getItemViewType(i);
if(type == TYPE_CAMERA){
view = mInflater.inflate(R.layout.multi_image_select_list_item_camera, viewGroup, false);
view.setTag(null);
}else if(type == TYPE_NORMAL){
ViewHolde holde;
if(view == null){
view = mInflater.inflate(R.layout.multi_image_select_list_item_image, viewGroup, false);
holde = new ViewHolde(view);
}else{
holde = (ViewHolde) view.getTag();
if(holde == null){
view = mInflater.inflate(R.layout.multi_image_select_list_item_image, viewGroup, false);
holde = new ViewHolde(view);
}
}
if(holde != null) {
holde.bindData(getItem(i));
}
}
/** Fixed View Size */
GridView.LayoutParams lp = (GridView.LayoutParams) view.getLayoutParams();
if(lp.height != mItemSize){
view.setLayoutParams(mItemLayoutParams);
}
return view;
}
class ViewHolde {
ImageView image;
ImageView indicator;
ViewHolde(View view){
image = (ImageView) view.findViewById(R.id.image);
indicator = (ImageView) view.findViewById(R.id.checkmark);
view.setTag(this);
}
void bindData(final Image data){
if(data == null) return;
// 处理单选和多选状态
if(showSelectIndicator){
indicator.setVisibility(View.VISIBLE);
if(mSelectedImages.contains(data)){
// 设置选中状态
indicator.setImageResource(R.drawable.multi_image_select_btn_selected);
}else{
// 未选择
indicator.setImageResource(R.drawable.multi_image_select_btn_unselected);
}
}else{
indicator.setVisibility(View.GONE);
}
File imageFile = new File(data.path);
if(mItemSize > 0) {
// 显示图片
Picasso.with(mContext)
.load(imageFile)
.placeholder(R.drawable.multi_image_select_default_error)
//.error(R.drawable.default_error)
.resize(mItemSize, mItemSize)
.centerCrop()
.into(image);
}
}
}
}