Skip to content

测量有问题,不能添加 padding,修改 onMeasure 和onLayout如下 #1

@w4lle

Description

@w4lle
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);
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions