package com.andexp.skinmixer.displaygroup;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import com.andexp.skinmixer.R;
import com.andexp.skinmixer.skin.SkinGroupType;
public class AdapterMonoImageSkinPart extends BaseAdapter implements ListAdapter {
protected ArrayList<String> mSkinPathList;
private Context mContext;
private SkinGroupType mSkinGroupType;
private LayoutInflater mLayoutInflater;
private OnSkinPartClickListener mOnSkinPartClickListener;
private static ImageView mlastImageViewClicked;
public AdapterMonoImageSkinPart(Context context, ArrayList<String> skinPathList,
SkinGroupType groupType, OnSkinPartClickListener listener) {
mContext = context;
mSkinPathList = skinPathList;
mSkinGroupType = groupType;
mLayoutInflater = LayoutInflater.from(context);
mOnSkinPartClickListener = listener;
}
@Override
public int getCount() {
int size = mSkinPathList.size();
return size / 2 + size % 2;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = loadConvertView(convertView);
ViewHolder holder = (ViewHolder) convertView.getTag();
loadImageViews(position, holder);
addOnClickListeners(position, holder);
return convertView;
}
private View loadConvertView(View convertView) {
ViewHolder holder;
if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.list_oneimage_skinpart, null);
holder = new ViewHolder();
holder.imageViewLeft = (ImageView) convertView.findViewById(R.id.iv_imageLeft);
holder.imageViewRight = (ImageView) convertView.findViewById(R.id.iv_imageRight);
convertView.setTag(holder);
}
return convertView;
}
private void loadImageViews(int position, ViewHolder holder) {
int listPositionLeftPanel = position * 2;
int listPositionRightPanel = listPositionLeftPanel + 1;
loadPanel(listPositionLeftPanel, holder.imageViewLeft);
loadPanel(listPositionRightPanel, holder.imageViewRight);
removeAnyBackgroundColors(holder);
}
private void loadPanel(int listPosition, ImageView imageView) {
if(mSkinPathList.size()> listPosition){
imageView.setVisibility(View.VISIBLE);
imageView.setImageBitmap(getBitmap(listPosition));
} else {
imageView.setVisibility(View.INVISIBLE);
}
}
private Bitmap getBitmap(int listPosition) {
String path = getPathFromPosition(listPosition);
return new BitmapDrawable(mContext.getResources(), path).getBitmap();
}
private String getPathFromPosition(int listPosition) {
String basePath = mSkinPathList.get(listPosition);
return basePath + mSkinGroupType.getContainedSkinPartType()[0].getFileName();
}
private void removeAnyBackgroundColors(ViewHolder holder) {
holder.imageViewLeft.setBackgroundColor(Color.parseColor("#00000000"));
holder.imageViewRight.setBackgroundColor(Color.parseColor("#00000000"));
}
private void addOnClickListeners(int position, ViewHolder holder) {
holder.imageViewLeft.setOnClickListener(new ImageOnClickListener(position, false));
holder.imageViewRight.setOnClickListener(new ImageOnClickListener(position, true));
}
class ImageOnClickListener implements OnClickListener {
int mPosition;
boolean isRightImage;
public ImageOnClickListener(int position, boolean isRightImage) {
mPosition = position;
this.isRightImage = isRightImage;
}
@Override
public void onClick(View v) {
int position = getArrayListPosition();
mOnSkinPartClickListener.OnSkinPartClick(position, v);
setSelectedBackgroundColor(v);
}
private void setSelectedBackgroundColor(View v) {
if (mlastImageViewClicked != null) {
mlastImageViewClicked.setBackgroundColor(Color.parseColor("#00000000"));
}
v.setBackgroundColor(mContext.getResources().getColor(R.color.skinpart_selected));
mlastImageViewClicked = (ImageView) v;
}
private int getArrayListPosition() {
int position = mPosition * 2;
if (isRightImage)
position++;
return position;
}
}
static class ViewHolder {
ImageView imageViewLeft;
ImageView imageViewRight;
}
}