我目前正在开发一个Android应用程序,其中涉及RecyclerView和滑动到解雇功能。在实现滑动显示选项动画时,我遇到了一个特殊的问题。
下面是我的自定义滑动到显示选项处理的代码片段:
override fun onChildDrawOver(
c: Canvas, recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float,
actionState: Int, isCurrentlyActive: Boolean
) {
val itemView = viewHolder.itemView
val isCanceled = dX == 0f && !isCurrentlyActive
if (isCanceled) {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, false)
return
}
if (viewHolder is OrderDetailProductsAdapter.OrderProductItemViewHolder) {
val binding = LayoutHistoryDetailItemBinding.bind(itemView)
binding.apply {
getDefaultUIUtil().onDraw(c, recyclerView, this.itemHistoryDetailMainView, dX / 2, dY, actionState, isCurrentlyActive)
}
}
}
我面临的问题是,这段代码没有像预期的那样将视图滚动到屏幕的一半。然而,当我使用下面的代码调用超类的onChildDraw方法时,它按预期工作:
super.onChildDraw(c, recyclerView, viewHolder, dX / 2, dY, actionState, isCurrentlyActive)
我希望了解为什么自定义实现不能产生所需的结果,而默认的onChildDraw方法可以。任何关于如何解决这个问题的见解或建议将不胜感激。
1条答案
按热度按时间6kkfgxo01#
注意,有两个类似的方法
onChildDraw
和onChildDrawOver
。onChildDrawOver
的存在似乎是为了在L之前的平台上兼容(参见。What is the difference between the ItemTouchHelper.Callback methods onChildDraw and onChildDrawOver?)。我认为您的代码只覆盖了
onChildDrawOver
,但覆盖了onChileDraw
,并且默认(超类)onChildDraw
仍然存在。我建议避免触摸
onChildDrawOver
,并确保只使用**onChileDraw
**。