You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RecyclerView侧滑动画异常:自定义实现未达预期滑动效果

问题原因分析

你的自定义实现失效的核心原因是:DefaultUIUtil.onDraw() 仅负责绘制滑动时的辅助视觉效果(比如侧滑背景),不会主动修改目标视图的实际位移属性。而父类的 onChildDraw() 方法内部除了调用 DefaultUIUtil.onDraw(),还同步处理了视图的 translationX 位移更新、滑动状态同步等关键逻辑,这才是视图能正确滑动的核心。

你的代码只调用了绘制逻辑,没有更新目标视图的实际位置,所以视觉上看不到预期的滑动效果。

修复方案

需要在自定义逻辑中手动同步目标视图的位移,并完善滑动取消时的状态重置逻辑,修改后的代码如下:

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) {
        // 滑动取消时重置目标视图的位移,避免停留在半滑状态
        if (viewHolder is OrderDetailProductsAdapter.OrderProductItemViewHolder) {
            val binding = LayoutHistoryDetailItemBinding.bind(itemView)
            binding.itemHistoryDetailMainView.translationX = 0f
        }
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, false)
        return
    }

    if (viewHolder is OrderDetailProductsAdapter.OrderProductItemViewHolder) {
        val binding = LayoutHistoryDetailItemBinding.bind(itemView)
        val targetView = binding.itemHistoryDetailMainView
        
        // 1. 手动设置目标视图的位移,这是视图能滑动的核心
        targetView.translationX = dX / 2
        
        // 2. 调用DefaultUIUtil绘制辅助视觉效果(比如侧滑背景)
        getDefaultUIUtil().onDraw(c, recyclerView, targetView, dX / 2, dY, actionState, isCurrentlyActive)
    } else {
        // 非目标ViewHolder,调用父类默认逻辑
        super.onChildDrawOver(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
    }
}
关键修改点说明
  • 增加 targetView.translationX = dX / 2:直接修改视图的位移属性,让视图跟随滑动手势移动到预期的半屏位置。
  • 完善取消滑动时的重置逻辑:在滑动取消时把目标视图的位移重置为0,避免视图停留在半滑状态无法恢复。
  • 补充非目标ViewHolder的处理:确保其他类型的ViewHolder仍能使用父类的默认侧滑逻辑,避免影响整体功能。

内容的提问来源于stack exchange,提问作者Muhammad Umar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:52:46