package com.michael.doubanonline; import java.util.ArrayList; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.LinearLayout.LayoutParams; import com.michael.doubanonline.base.BaseCompatableAdapter; import com.michael.doubanonline.bean.Photo; import com.michael.doubanonline.component.ClickEffectImageView; import com.michael.doubanonline.util.MathUtil; import com.michael.doubanonline.util.ScreenUtil; import com.nostra13.universalimageloader.core.ImageLoader; /** * 活动主页的适配器 * * */ public class OnlineDetailAdapter extends BaseCompatableAdapter<Photo> { protected ImageLoader imageLoader; private static final int COLUMN_NUM = 4; private int PICTURE_WIDTH; public OnlineDetailAdapter(Context context, ArrayList<Photo> data) { super(context, data); PICTURE_WIDTH = ScreenUtil.getScreenWidth(context) / 4; imageLoader = MyApplication.getImageLoader(); } class ViewHolder { ClickEffectImageView ivOne; ClickEffectImageView ivTwo; ClickEffectImageView ivThree; ClickEffectImageView ivFour; } @Override public int getCount() { if (data == null) { return 0; } return MathUtil.getAbsoluteInt(data.size(), COLUMN_NUM); } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if (convertView == null) { convertView = super.layoutInflater.inflate(R.layout.list_item_detail, parent, false); viewHolder = new ViewHolder(); viewHolder.ivOne = (ClickEffectImageView) convertView.findViewById(R.id.ivOne); viewHolder.ivTwo = (ClickEffectImageView) convertView.findViewById(R.id.ivTwo); viewHolder.ivThree = (ClickEffectImageView) convertView.findViewById(R.id.ivThree); viewHolder.ivFour = (ClickEffectImageView) convertView.findViewById(R.id.ivFour); LayoutParams params = new LayoutParams(PICTURE_WIDTH, PICTURE_WIDTH, 1.0f); params.setMargins(2, 2, 2, 2); viewHolder.ivOne.setLayoutParams(params); viewHolder.ivTwo.setLayoutParams(params); viewHolder.ivThree.setLayoutParams(params); viewHolder.ivFour.setLayoutParams(params); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.ivOne.setOnClickListener(listener); viewHolder.ivTwo.setOnClickListener(listener); viewHolder.ivThree.setOnClickListener(listener); viewHolder.ivFour.setOnClickListener(listener); viewHolder.ivOne.setTag(position); viewHolder.ivTwo.setTag(position); viewHolder.ivThree.setTag(position); viewHolder.ivFour.setTag(position); for (int i = 0; i < COLUMN_NUM; i++) { int realIndex = (position * COLUMN_NUM) + i; if (realIndex >= data.size()) { switch (i) { case 1: viewHolder.ivTwo.setVisibility(View.INVISIBLE); viewHolder.ivThree.setVisibility(View.INVISIBLE); viewHolder.ivFour.setVisibility(View.INVISIBLE); break; case 2: viewHolder.ivThree.setVisibility(View.INVISIBLE); viewHolder.ivFour.setVisibility(View.INVISIBLE); break; case 3: viewHolder.ivFour.setVisibility(View.INVISIBLE); break; default: break; } break; } Photo photo = data.get(realIndex); switch (i) { case 0: imageLoader.displayImage(photo.thumb, viewHolder.ivOne, ImageOptions.getGrayPictureOption(0));// 加载图片 break; case 1: imageLoader.displayImage(photo.thumb, viewHolder.ivTwo, ImageOptions.getGrayPictureOption(0));// 加载图片 break; case 2: imageLoader.displayImage(photo.thumb, viewHolder.ivThree, ImageOptions.getGrayPictureOption(0));// 加载图片 break; case 3: imageLoader.displayImage(photo.thumb, viewHolder.ivFour, ImageOptions.getGrayPictureOption(0));// 加载图片 break; default: break; } } return convertView; } private OnClickListener listener = new OnClickListener() { int location;// 在ListItem中的位置 @Override public void onClick(View v) { switch (v.getId()) { case R.id.ivOne: location = 0; break; case R.id.ivTwo: location = 1; break; case R.id.ivThree: location = 2; break; case R.id.ivFour: location = 3; break; default: break; } setClickedPhotoPosition(v, location); if (onPictureClick != null) { onPictureClick.onClick(getClickedPhotoPosition()); } } }; private OnPictureClick onPictureClick; public void setOnPictureClick(OnPictureClick onPictureClick) { this.onPictureClick = onPictureClick; } public interface OnPictureClick { public void onClick(int position); } private int clickedPosition = -1; /** * 设置当前被点击的的图片在photos中的索引 * */ private void setClickedPhotoPosition(View v, int location) { int position = (Integer) v.getTag(); this.clickedPosition = position * 4 + location; } /** * 获取当前被点击的的图片在photos中的索引 * */ private int getClickedPhotoPosition() { return this.clickedPosition; } }