ItemTouchHelper,带有Canvas中文本的滑动删除。

6
我们正在RecyclerView中实现ItemTouchHelper,在RV中向左滑动时,我们正在重写onChildDraw,问题是,如果我有一个大小为X的RecyclerView,并尝试解除第2、3、4或5个元素,唯一显示文本的是列表中的第一个元素,但是如果是图像,则工作得非常好。
@Override
    public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
        if (viewHolder.getAdapterPosition() == -1)
            return;
        View itemView = viewHolder.itemView;
        Paint paint = new Paint();
        paint.setColor(Color.WHITE);
        paint.setTextSize(40);
        paint.setTextAlign(Paint.Align.CENTER);
        String inbox = itemView.getContext().getResources().getString(R.string.sendinbox);
        c.drawText(inbox, itemView.getRight() - 200, itemView.getHeight()/2, paint);
        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
2个回答

9
也许已经晚了,但我还是会回答你的问题。 你在Canvas上绘制文本时,需要设置X和Y位置。由于Canvas对所有项目都是相同的,你一直在同一位置设置相同的文本。解决方法是将itemView.getTop()添加到文本的Y位置中:
c.drawText(inbox, itemView.getRight() - 200, itemView.getTop() + itemView.getHeight() / 2, paint);

很抱歉,我的英语不好。
抱歉我的英語不好。

3
弗朗西斯科·坦布里上面的回答是正确的。此外,如果您需要垂直居中文本,可以修改“y”位置,例如:
int yPos = (int) ((itemView.getTop() + itemView.getHeight() / 2)  - ((p.descent() + p.ascent()) / 2));

其中:

p 是您的绘制对象,itemView 是您的 RecyclerView 项

然后使用它:

c.drawText(inbox, itemView.getRight() - 200, yPos, paint);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接