ItemTouchHelper,滑动以在画布中删除文本

时间:2017-06-28 22:15:02

标签: android android-recyclerview itemtouchhelper

我们在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);
}

2 个答案:

答案 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);

对不起我的英文