Android 吸引物品回收视图的粘性物品装饰

Android 吸引物品回收视图的粘性物品装饰,android,android-recyclerview,item-decoration,stickyrecycleview,Android,Android Recyclerview,Item Decoration,Stickyrecycleview,我正在实现一个粘性标题项装饰,但我正在尝试使标题覆盖该项。我是根据timehop的库编写代码的 根据它的设计方式,项目装饰仍将创建一行,但我希望它在实际列表中的高度为0 这是一个我正在努力完成的例子。 下面是当前粘性物品装饰的代码,它将创建自己的行。我通过更改它使用的Rect来处理一些方面,但我无法得到正确的结果 override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: Recycl

我正在实现一个粘性标题项装饰,但我正在尝试使标题覆盖该项。我是根据timehop的库编写代码的

根据它的设计方式,项目装饰仍将创建一行,但我希望它在实际列表中的高度为0

这是一个我正在努力完成的例子。

下面是当前粘性物品装饰的代码,它将创建自己的行。我通过更改它使用的
Rect
来处理一些方面,但我无法得到正确的结果

override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
    super.getItemOffsets(outRect, view, parent, state)
    val itemPosition = parent.getChildAdapterPosition(view)
    if (itemPosition == RecyclerView.NO_POSITION) {
        return
    }
    if (mHeaderPositionCalculator.hasNewHeader(itemPosition, mOrientationProvider.isReverseLayout(parent))) {
        val header = getHeaderView(parent, itemPosition)
        setItemOffsetsForHeader(outRect, header, mOrientationProvider.getOrientation(parent))
    }
}

/**
 * Sets the offsets for the first item in a section to make room for the header view
 *
 * @param itemOffsets rectangle to define offsets for the item
 * @param header      view used to calculate offset for the item
 * @param orientation used to calculate offset for the item
 */
private fun setItemOffsetsForHeader(itemOffsets: Rect, header: View, orientation: Int) {
    mDimensionCalculator.initMargins(mTempRect, header)

    // should I modify itemOffsets here?
    if (orientation == LinearLayoutManager.VERTICAL) {
        itemOffsets.top =header.height + mTempRect.top + mTempRect.bottom
    } else {
        itemOffsets.left = header.width + mTempRect.left + mTempRect.right
    }
}

override fun onDrawOver(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
    super.onDrawOver(canvas, parent, state)

    val childCount = parent.childCount
    if (childCount <= 0 || mAdapter.itemCount <= 0) {
        return
    }

    for (i in 0 until childCount) {
        val itemView = parent.getChildAt(i)
        val position = parent.getChildAdapterPosition(itemView)
        if (position == RecyclerView.NO_POSITION) {
            continue
        }

        val hasStickyHeader = mHeaderPositionCalculator.hasStickyHeader(itemView, mOrientationProvider.getOrientation(parent), position)
        if (hasStickyHeader || mHeaderPositionCalculator.hasNewHeader(position, mOrientationProvider.isReverseLayout(parent))) {
            val header = mHeaderProvider.getHeader(parent, position)
            //re-use existing Rect, if any.
            var headerOffset: Rect? = mHeaderRects.get(position)
            if (headerOffset == null) {
                headerOffset = Rect()
                mHeaderRects.put(position, headerOffset)
            }


            mHeaderPositionCalculator.initHeaderBounds(headerOffset, parent, header, itemView, hasStickyHeader)
            // should I modify headerOffset here?
            mRenderer.drawHeader(parent, canvas, header, headerOffset)
        }
    }
}
override-fun-getItemOffset(outRect:Rect,view:view,parent:RecyclerView,state:RecyclerView.state){
super.getItemOffset(outRect、view、parent、state)
val itemPosition=parent.getChildAdapterPosition(视图)
if(itemPosition==RecyclerView.NO_位置){
返回
}
if(mHeaderPositionCalculator.hasNewHeader(itemPosition,mOrientationProvider.isReverseLayout(父))){
val header=getHeaderView(父项,itemPosition)
setItemOffsetsForHeader(outRect、标头、mOrientationProvider.getOrientation(父级))
}
}
/**
*设置剖面中第一个项目的偏移,以便为标题视图腾出空间
*
*@param itemOffsets矩形用于定义项目的偏移量
*@param头视图用于计算项目的偏移量
*@param-orientation用于计算项目的偏移量
*/
private fun setItemOffsetsForHeader(itemOffsets:Rect,标题:View,方向:Int){
mDimensionCalculator.initMargins(mTempRect,页眉)
//我应该在这里修改ItemOffset吗?
if(方向==LinearLayoutManager.VERTICAL){
itemOffsets.top=页眉.height+mTempRect.top+mTempRect.bottom
}否则{
itemOffsets.left=header.width+mTempRect.left+mTempRect.right
}
}
覆盖视图(画布:画布,父对象:RecyclerView,状态:RecyclerView.state){
super.onDrawOver(画布、父级、状态)
val childCount=parent.childCount
如果(儿童计数)