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);
}
4

2 回答 2

8

可能为时已晚,但无论如何我都会回答。您的问题是在画布上绘制文本时,您必须设置 X 和 Y 位置,并且由于所有项目的画布都相同,因此您不断在相同的 Y 位置设置相同的文本。解决方案是将itemView.getTop()添加到 Text 的 Y 位置:

c.drawText(inbox, itemView.getRight() - 200, itemView.getTop() + itemView.getHeight() / 2, paint);

对不起我的英语

于 2018-06-18T21:18:48.493 回答
3

上面的Francisco Tamburri回答是正确的,如果您需要将文本垂直居中,您可以修改'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);
于 2020-05-05T10:30:45.337 回答