android - 向左/向右滑动 RecyclerView 的部分行

标签 android android-recyclerview itemtouchhelper

我已经像这样创建了一个 RecyclerView ItemTouchHelper -

public class MyItemTouchHelper extends android.support.v7.widget.helper.ItemTouchHelper.SimpleCallback {
private final Paint p;
Context mContext;

@Override
public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) {
    return viewHolder.itemView.getWidth()/3;
}

public MyItemTouchHelper(Context context) {
    super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
    mContext = context;
    p = new Paint();

}

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
    return false;
}


@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
    int position = viewHolder.getAdapterPosition();

    if (direction == ItemTouchHelper.LEFT) {
    } else {
    }
}


@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder
        viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
    Bitmap icon;
    String text = "Like it, remind me!";

    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
        View itemView = viewHolder.itemView;

        float height = (float) itemView.getBottom() - (float) itemView.getTop();
        float width = height / 10;
        if (dX > 0) {
            p.setColor(Color.parseColor("#388E3C"));

            RectF background = new RectF((float) itemView.getLeft(), (float) itemView.getTop(), dX/3, (float) itemView.getBottom());
            c.drawRect(background, p);

            Rect r = new Rect();
            p.getTextBounds(text, 0, text.length(), r);
            float yPos = height/2;

            yPos += (Math.abs(r.height()))/2;
            int xPos = (c.getWidth() / 2);
            p.setTextAlign(Paint.Align.CENTER);
            c.drawText(text,(float)xPos  , yPos, p);
        } else {
            p.setColor(Color.parseColor("#D32F2F"));

            RectF background = new RectF((float) itemView.getRight() + dX, (float) itemView.getTop(), (float) itemView.getRight(), (float) itemView.getBottom());
            c.drawRect(background, p);


            RectF icon_dest = new RectF((float) itemView.getRight() - 2 * width, (float) itemView.getTop() + width, (float) itemView.getRight() - width, (float) itemView.getBottom() - width);
        }

    }
    super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);

}

但这是将整行从屏幕上滑出,我只想移动 25% 的行。让我知道任何前进的提示..

最佳答案

覆盖 onChildDraw 并将 dX 除以大于 1 的因子,然后将其传递给 super.onChildDraw 方法。对于通过滑动移动 dX 的 View 持有者,它将在移动 dX/factor 时绘制在屏幕上。

关于android - 向左/向右滑动 RecyclerView 的部分行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37913184/

相关文章:

android - Horizo​​ntal RecyclerView 项目居中

android - RecyclerView 拖放 - 使用 ItemTouchHelper - 如何在拖动时更快地设置滚动速度?

android - 将 JAR 文件包含在 Android 库中是个好主意(与其他库的潜在冲突)?

java - RecyclerView 没有动画插入,但它确实动画删除

android - 防止微调器下拉显示

android - 如何减慢按下按钮时 Android GridView 的滚动速度? (往后靠)

android - 如何在 RecyclerView 上排序期间提供自定义动画(notifyDataSetChanged)

android - onSwipe 完成的 View 消失,有空白空间并且滑动不再起作用

android - 在轮廓openCV中查找直线

android - AAPT2 错误 : check logs for details: unknown element <action> found