Android 吸引物品回收视图的粘性物品装饰
我正在实现一个粘性标题项装饰,但我正在尝试使标题覆盖该项。我是根据timehop的库编写代码的 根据它的设计方式,项目装饰仍将创建一行,但我希望它在实际列表中的高度为0 这是一个我正在努力完成的例子。 下面是当前粘性物品装饰的代码,它将创建自己的行。我通过更改它使用的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
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
如果(儿童计数)