首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ItemTouchHelper获取滑动方向

ItemTouchHelper获取滑动方向
EN

Stack Overflow用户
提问于 2017-08-01 14:16:58
回答 2查看 3.1K关注 0票数 4

我需要改变基于滑动方向的行项的背景颜色,如果向右滑动,则将颜色更改为绿色,如果向左滑动,则将颜色更改为红色。

但我发现很难弄清楚刷卡的方向。

这是我的代码。

代码语言:javascript
复制
public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback 
{

private final ItemTouchHelperAdapter mAdapter;
public SimpleItemTouchHelperCallback(ItemTouchHelperAdapter mAdapter) {
    this.mAdapter = mAdapter;
}

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

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

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

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

@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
    if(direction == ItemTouchHelper.LEFT){
        Log.i("Swipe direction : ","Left");
    }
    else if (direction == ItemTouchHelper.RIGHT){
        Log.i("Swipe direction : ","Right");
    }
    mAdapter.onItemDismiss(viewHolder.getAdapterPosition());
}
}

我在日志里没有得到任何价值。

请提个建议。

EN

回答 2

Stack Overflow用户

发布于 2019-03-18 22:54:23

如拉米斯所示,您可以使用ItemTouchHelper.SimpleCallbackonChildDraw回调来检测swipe 的方向,同时swipe正在进行,然后您可以使用此回调根据swipe的方向显示不同的项目背景。完成后,onSwiped回调将检测滑动的方向,您可以在那里决定要采取的操作。

代码语言:javascript
复制
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {

    @Override
    public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
                            @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY,
                            int actionState, boolean isCurrentlyActive) {

        // dX (float) is the amount of horizontal displacement caused by user's action.            
        // If the horizontal displacement is positive the item is being 
        // swiped to the RIGHT, if it is negative the item is being 
        // swiped to the LEFT.

        if(dX >0) {
            // RIGHT swipe   
            } else {
            // LEFT swipe
            }
    }

}).attachToRecyclerView(mRecyclerView);
票数 4
EN

Stack Overflow用户

发布于 2017-08-01 14:20:13

您可以使用onChildDraw方法,有关完整的代码Swipable Recycler view,请参阅下面的教程

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45430223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档