NineImageForCircleFriends朋友圈九宫格

需求

  • 当只有一张的时候,显示一张图片(宽度是整个手机宽度(去掉左右margin和padding值))
  • 当有两张和四张图片的时候,图片的宽度是整个宽度的1/2,当然要剔除margin和padding值
  • 当图片是3,5,6,7,8,9张的时候,显示的是类似于微信九宫格的图片

主要的测量方法

 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = 0;
        int totalWidth = width - getPaddingLeft() - getPaddingRight();
        if (mImageInfo != null && mImageInfo.size() > 0) {
            if (mImageInfo.size() == 1) {
                gridWidth = singleImageSize > totalWidth ? totalWidth : singleImageSize;
                gridHeight = (int) (gridWidth / singleImageRatio);
                //矫正图片显示区域大小,不允许超过最大显示范围
                if (gridHeight > singleImageSize) {
                    float ratio = singleImageSize * 1.0f / gridHeight;
                    gridWidth = (int) (gridWidth * ratio);
                    gridHeight = singleImageSize;
                }
            } else if (mImageInfo.size() == 2 || mImageInfo.size() == 4) {

                //如果当为2张或者4张图片的时候   就按照总宽度的  1/2
                gridWidth = gridHeight = (totalWidth - gridSpacing * (columnCount - 1)) / columnCount;
                //这里无论是几张图片,宽高都按总宽度的 1/3
//                gridWidth = gridHeight = (totalWidth - gridSpacing ) / 2;
            } else {
                gridWidth = gridHeight = (totalWidth - gridSpacing * 2) / 3;
            }
            width = gridWidth * columnCount + gridSpacing * (columnCount - 1) + getPaddingLeft() + getPaddingRight();
            height = gridHeight * rowCount + gridSpacing * (rowCount - 1) + getPaddingTop() + getPaddingBottom();

        }
        setMeasuredDimension(width, height);
    }

效果图

项目地址

https://github.com/wuyinlei/NineImageForCircleFriends

参考

https://github.com/jeasonlzy/NineGridView

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 太长了,还是转载吧...今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源...
    庞哈哈哈12138阅读 20,321评论 3 283
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,684评论 1 92
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,680评论 2 45
  • 今年跟往年特别不同, 哈哈,写完这句话,忽然觉得有些矫情。 感觉仿佛找到了以前写新学期的打算的感觉。 ‘时光如梭,...
    NiraraX阅读 2,338评论 2 1
  • 辅导的方式——OJT在岗辅导 引子 721法则串讲:7:岗位学习;2:与同行及高手交流;1:培训 从以上的721法...
    汪顺唯阅读 6,563评论 1 0