当前位置: 首页 > 知识库问答 >
问题:

Android ItemTouchHelper部分滑动

胡沈义
2023-03-14

当我们刷从结束,我可以显示红色的背景和删除图标。我正在尝试实现部分滑动功能,在部分滑动时,滑动停止在删除图标之前。我试着遵循这些解决方案。但是,这对我没用。请给我指出正确的方向。

public class PriorityItemTouchHelperCallback extends ItemTouchHelper.Callback {

private final ItemTouchHelperListener mAdapter;
private Context context;

public PriorityItemTouchHelperCallback(
        ItemTouchHelperListener adapter, Context context) {
    mAdapter = adapter;
    this.context = context;
}


@Override
public boolean isLongPressDragEnabled() {
    return true;
}

@Override
public boolean isItemViewSwipeEnabled() {
    return true;
}

@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
    final int swipeFlags = ItemTouchHelper.START;
    return makeMovementFlags(dragFlags, swipeFlags);
}

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

@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
    mAdapter.onItemDismiss(viewHolder.getAdapterPosition());
}


@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
        // Get RecyclerView item from the ViewHolder
        View itemView = viewHolder.itemView;
        float height = (float) itemView.getBottom() - (float) itemView.getTop();
        float width = height / 3;

        Paint p = new Paint();
        p.setColor(Color.RED);
        if (dX > 0) {

            c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), dX,
                    (float) itemView.getBottom(), p);
        } else {

            p.setColor(Color.RED);
            RectF background = new RectF((float) itemView.getRight() + dX, (float) itemView.getTop(), (float) itemView.getRight(), (float) itemView.getBottom());
            c.drawRect(background, p);
            Bitmap icon = BitmapFactory.decodeResource(context.getResources(), R.drawable.round_delete_white_24);
            RectF icon_dest = new RectF(
                    (float) itemView.getRight() -  2 * width + width / 2,
                    (float) itemView.getTop() + width + width / 8,
                    (float) itemView.getRight() - width / 2,
                    (float) itemView.getBottom() - width - width / 8);
            c.drawBitmap(icon, null, icon_dest, p);
        }

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

}

共有1个答案

高增
2023-03-14

将此行中的dx参数更改为dx/3或dx/5:

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

由于dx参数值介于(0表示无刷)和(1表示全刷)之间

 类似资料:
  • 我正在尝试使用FragmentTransaction实现以下效果。设置自定义动画。 片段A正在显示 将片段A替换为片段B。在替换过程中,片段A应该保持可见。片段B应该从右侧滑入。片段B应该在片段A的顶部滑动。 我在动画设置中获得幻灯片没有问题。我的问题是,当幻灯片在动画中运行时,我不知道如何使片段A停留在它所在的位置,并处于片段B之下。不管我怎么做,碎片A似乎在上面。 我怎样才能做到这一点? 这是

  • 本文向大家介绍python3+PyQt5实现自定义分数滑块部件,包括了python3+PyQt5实现自定义分数滑块部件的使用技巧和注意事项,需要的朋友参考一下 本文通过Python3+PyQt5实现自定义部件–分数滑块。它既能支持键盘也支持鼠标,使用物理(视口)坐标通过绘制方式显示。 运行结果: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我有一个活动,带有一个可视页面,涵盖了整个活动。在这个ViewPager中是一个ListView,它只覆盖片段的底部。ListView可以识别滑动事件(您可以左右滑动项目),但当您想滑动列表项目时,ViewPager会切换页面,因此无法工作。有没有一种简单的方法来解决这个问题,这样ViewPager就不会收到列表中的触摸事件。 谢谢

  • 我想在我的应用程序中创建从下到上滚动的滑动菜单。我在活动的底部有一个按钮,当用户点击按钮时,菜单就会显示出来。当用户再次点击按钮时,菜单应该消失。用户还可以上下滑动以显示或消失菜单。 菜单可以像这个应用程序中的任何一个。做 请看下面的截图。你知道怎么做吗?你有什么建议吗?

  • 大家好, 我需要实现部分向左滑动以查看右侧按钮。 我尝试了在这里和官方论坛上找到的多种解决方案,但所有的结果都是触发了点击行为。 没有一个导致部分左划。 知道如何实现它吗? 提前感谢