Android 9 宫格图片选取(含完整 Demo)

先来看看今日完成的效果:

059D79E4EEFAEA97AC07F24121CD6A4C.gif

本篇涉及到一些权限申请的问题,我就直接在上一章的项目中写的Android 拍照/录像/文件选取/获取视频第一帧(含完整 Demo)

经典分析

这个效果我是是采用 RecyclerView 多布局配合GridLayoutManager()管理器来完成的效果

  • 红色: 布局一
  • 黄色: 布局二

image.png

点击黄色按钮的时候,拉起图库,选取图片,然后添加到布局一中

当红色布局数据 == 9 时,那么就隐藏掉最后黄色的布局即可

点击底部按钮的时候,显示出 RecyclerView 所有数据即可

本篇 RecyclerView 采用的适配器是BaseQuickAdapter多布局

在写这个小项目中遇到的问题

RecyclerView 的item 通过 GONE 隐藏的时候,虽然可以隐藏,但是还会占据位置

众所周知:

  • VIEW.GONE View 隐藏,不占据位置
  • View.VISIBLE View显示
  • View.INVISIBLE View 隐藏,占据位置

解决:

  • 第一步: item 布局使用 ConstraintLayout包裹

image.png

  • 第二步:(代码来自于网络)
    //防止隐藏item出现空白
    //isVisible true 显示 false 不显示
    //itemView 传入的是根布局
    private fun setVisibility(isVisible: Boolean, itemView: View) {
        val param = RecyclerView.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
        if (isVisible) {
            param.height = ConstraintLayout.LayoutParams.WRAP_CONTENT// 这里注意使用自己布局的根布局类型
            param.width = ConstraintLayout.LayoutParams.MATCH_PARENT// 这里注意使用自己布局的根布局类型
            itemView.visibility = View.VISIBLE
        } else {
            param.height = 0
            param.width = 0
            itemView.visibility = View.GONE
        }
        itemView.layoutParams = param
    }
复制代码

为什么要这么干:

即使它占据位置,但是把它的宽高设置 0,那么它也是不显示的

这个小项目比较简单,大家直接下载代码来看看吧~

完整代码

猜你喜欢:

网抑云酒级用户的主页

原创不易,您的点赞就是对我最大的支持!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享