protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
totalWidth = sizeWidth - getPaddingLeft() - getPaddingRight();
if (listData != null && listData.size() > 0) {
int measureWidth, measureHeight;
int childrenCount = listData.size();
if (childrenCount == 1) {
if (!isSmallScreen) {
singleWidth = ((Photo) listData.get(0)).preview_width;
singleHeight = ((Photo) listData.get(0)).preview_height;
} else {
singleWidth = defaultWidth;
singleHeight = defaultHeight;
}
} else {
singleWidth = (totalWidth - gap * (3 - 1)) / 3;
singleHeight = singleWidth;
}
measureChildren(MeasureSpec.makeMeasureSpec(singleWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(singleHeight, MeasureSpec.EXACTLY));
measureWidth = singleWidth * columns + gap * (columns - 1);
measureHeight = singleHeight * rows + gap * (rows - 1);
setMeasuredDimension(sizeWidth, measureHeight);
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
layoutChildrenView();
}
private void layoutChildrenView() {
int childrenCount = listData.size();
for (int i = 0; i < childrenCount; i++) {
int[] position = findPosition(i);
int left = (singleWidth + gap) * position[1] + getPaddingLeft();
int top = (singleHeight + gap) * position[0] + getPaddingTop();
int right = left + singleWidth;
int bottom = top + singleHeight;
NineGridImageView childrenView = (NineGridImageView) getChildAt(i);
if (childrenCount == 1) {
//只有一张图片
childrenView.setScaleType(ImageView.ScaleType.FIT_CENTER);
} else {
childrenView.setScaleType(ImageView.ScaleType.CENTER_CROP);
}
Photo photo = (Photo) listData.get(i);
if (photo != null) {
String imageUrl = isSmallScreen ? photo.small_url : photo.middle_url;
childrenView.setImageUrl(imageUrl);
}
final int itemPosition = i;
childrenView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListerner != null) {
onItemClickListerner.onItemClick(v, itemPosition);
}
}
});
childrenView.layout(left, top, right, bottom);
}
}