我们在RecyclerView中实现了ItemTouchHelper,当我们在RV中向左滑动时,我们正在重写onChildDraw,问题是,如果我有一个X尺寸的RecyclerView,我试图解除2,3 ,4或5个元素,唯一一个显示文本的元素是List中的第一个元素,但是,如果它是一个图像,它可以很好地工作
@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);
}
答案 0 :(得分:1)
Francisco Tamburri上面回答的是正确的,如果您需要垂直居中放置文本,也可以像下面这样修改'y'位置:
int yPos = (int) ((itemView.getTop() + itemView.getHeight() / 2) - ((p.descent() + p.ascent()) / 2));
其中:
p是您的绘画对象, itemView是您的回收站视图项目
然后使用它:
c.drawText(inbox, itemView.getRight() - 200, yPos, paint);
答案 1 :(得分:0)
可能为时已晚,但无论如何我都会回答。 您的问题是在画布上绘制文本时,您必须设置X和Y位置,并且由于画布对于所有项目都是相同的,因此您始终在相同的Y位置设置相同的文本。解决方案是将 itemView.getTop()添加到文本的Y位置:
c.drawText(inbox, itemView.getRight() - 200, itemView.getTop() + itemView.getHeight() / 2, paint);
对不起我的英文