LineChen / NineGridView

🔥🔥🔥 -可能最通用的九宫格布局

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NineGridView

可能是最通用的九宫格布局,不仅仅能显示图片,ItemView可自定义,类似RecyclerView。

  • 正常九宫格视图,仿微信,Item显示样式可完全自定义
  • 超过9个Item,可自定义额外展示的布局
  • 自定义适配单个,两个,三个,四个item视图显示样式
  • 自定义item间的间距

预览

一个Item

usual fill custom

两个Item

usual fill

三个Item

usual bili

四个Item

usual fill bili

其他

额外布局 多类型

依赖

maven { url 'https://jitpack.io' }
implementation 'com.github.simplepeng:NineGridView:v1.0.2'

使用

继承NineGridView.Adapter(),重写需要的方法,具体可查看demo中的使用方法。

class CustomAdapter : NineGridView.Adapter()
abstract class Adapter {

    // 返回总的item数量
    abstract fun getItemCount(): Int

    //分发各种不同itemType,类似RecyclerView
    fun getItemViewType(position: Int) = 0

    //默认的ItemView样式
    abstract fun onCreateItemView(parent: ViewGroup, viewType: Int): View

    abstract fun onBindItemView(itemView: View, viewType: Int, position: Int)

    //适配单个ItemView的样式
    open fun onCreateSingleView(parent: ViewGroup, viewType: Int): View? = null

    open fun onBindSingleView(singleView: View, viewType: Int, position: Int) {

    }

    //适配额外的View的样式
    open fun onCreateExtraView(parent: ViewGroup, viewType: Int): View? = null

    open fun onBindExtraView(extraView: View, viewType: Int,  position: Int) {

    }
}

可使用的属性

app:ngv_spanCount                   //横向的item数量,默认为3
app:ngv_itemGap                     //item间的间距,默认为1dp
app:ngv_maxCount                    //最多显示的item数量,默认为9
app:ngv_single_strategy             //一个item的显示样式
app:ngv_two_strategy="usual"        //两个item的显示样式
app:ngv_three_strategy              //三个item的显示样式
app:ngv_four_strategy               //四个item的显示样式
app:ngv_extra_strategy              //是否显示额外布局

如果不需要自定义的ItemView,也可以直接使用本库封装好的ImageAdapter,效果就是预览图那种。

val imageAdapter = ImageAdapter(item.images, onBindView = { imageView, item, position ->
    Glide.with(imageView)
        .load(item)
        .centerCrop()
        .into(imageView)
})
imageAdapter.onItemViewClick = { item, position ->
    toast("ItemView click -- $position")
}
imageAdapter.onExtraViewClick = { position ->
    toast("ExtraView click  $position")
}
holder.nineGridView.adapter = imageAdapter

版本迭代

  • v1.0.3:修复bug

  • v1.0.2:

    • 支持更多显示类型
    • 支持多itemViewType
    • 抽出Adapter属性到attrs.xml
  • v1.0.1:

    • 修改属性名,预防和其他View的属性冲突
    • 增加ImageAdapter
    • 去掉BuildConfig.java
    • 增加isInEditMode,在布局编辑状态也可以预览样式
  • v1.0.0:初次上传

About

🔥🔥🔥 -可能最通用的九宫格布局


Languages

Language:Kotlin 100.0%