当前位置: 首页 > 知识库问答 >
问题:

手动调用ItemTouchHelper.OnChildDraw()在RecyclerView上滑动项

燕烨
2023-03-14

问题是ItemTouchHelper.onChildDraw()canvas作为参数,根据文档,该参数是“RecyclerView正在绘制其子级的画布”。有没有办法从recyclerview中获取画布?如果执行ItemTouchHelper.onChildDraw(new Canvas()...),则会执行代码,但在ViewWholder后面没有绘制任何内容,因为它显然不是recyclerview使用的画布...也许有办法设置一个canvas供recyclerview使用吗?

谢谢你的正手点子。

共有1个答案

沙小白
2023-03-14

我解决这一问题的方法是创建一个自定义视图,扩展RecyclerView,并保存android onDraw()生成的canvas对象。然后我可以获取相同的画布,只要我想通过代码手动触发滑动。

public class CanvasRecyclerView extends RecyclerView {
    private Canvas mCanvas;

    public CanvasRecyclerView(final Context context) { super(context); }

    public CanvasRecyclerView(final Context context, @Nullable final AttributeSet attrs) { super(context, attrs); }

    @Override public void onDraw(final Canvas c) {
        mCanvas = c;
        super.onDraw(c);
    }

    public Canvas getCanvas() {
        return mCanvas;
    }
}

希望有帮助!

更新

private fun swipeCard(direction: Int) {
    val visibleChild = (recyclerView?.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
    val holder = recyclerView?.findViewHolderForAdapterPosition(visibleChild) ?: return

    val dX = if (direction == LEFT) -holder.itemView.width else holder.itemView.width

    val translation = SwipeAnimation(dX.toFloat()) //your translation here
    translation.setSwipingElements(recyclerView, touchHelper, holder)
    emptyView.startAnimation(translation)
}
 类似资料:
  • 我试图在RecyclerView中实现一个swipe来解除操作,但当我在ViewHolder中的任何视图上设置OnClickListener时,它将覆盖该视图上的所有OnTouch事件。 我可以放弃OnClickListener而在TouchListener中处理所有单击,但如果在RecycleView的子视图中有多个按钮,那么将会有大量代码,这看起来不是一个正确的方法。 在我的RecyleVie

  • 我正在做一个项目,在这个项目中,我必须调用recyclerview的scolling事件的api来从服务器获取一组新的问题列表。 请引导我,我会感谢你的。

  • 在适配器中 我试过了所有的方法,但是很难从RecolyerView中滑动项目,并且当snackbar的undo被按下时,我希望该项目重新出现。我希望从RecolyerView中滑动项目,并且当项目被滑动时,底部的项目应该向上移动。

  • 我想使用swipe手势(即gmail应用程序)实现recyclerview项目之间的导航。这样,用户就不必返回列表,只需单击下一个项目就可以获得其详细信息视图。我找不到如何实现这一点的教程。

  • 我想实现像Google Play App一样的平滑滚动行为。我尝试过这里提到的解决方案: 解决方案1 解决方案2 解决方案3 但所有上述解决方案都没有像在Google Play应用程序中那样给出预期的结果。以下是xml代码: 如何实现平滑滚动? 编辑:以下是recyclerview适配器 }