首页 文章

自定义滑动ItemTouchHelper

提问于
浏览
0

嗨,我已经将ItemTouchHelper添加到我的listview,我已经做了MyItemTouchHelper.attachToRecyclerView(myRecyclerView),然后我实现了向右滑动的代码:

private ItemTouchHelper itemTouchHelperEventi = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        return false;
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {


            Evento ev = lista_eventi.get(viewHolder.getAdapterPosition());
            analizzaEvento = new AnalizzaEvento(ev.getNome_evento());
            adapterRecyclerViewEventi.remove(positionForResult);



        adapterRecyclerViewEventi.notifyDataSetChanged();
    }
});

现在我想实现滑动代码来删除项目如何gmail,我希望当我向右滑动背景行变为红色时,在行左侧有标签撤消,在行右侧有标签删除(或确认)如果我点击在右边我删除项目如果我点击左边返回上一个情况 .

请不要链接其他库我想在我的代码中添加这个功能而不使用外部库,我不想仅为此功能重写所有代码 .

可能吗?

1 回答

  • 1

    这是示例代码

    ItemTouchHelper.Callback simpleItemTouchCallback=new ItemTouchHelper.Callback() {
                                @Override
                                public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    
                                    //Unlock the movement of the item 
                                   //If you want only left to right unlock that moment only 
    
                                    int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
                                    int swipeFlags;
                                    if(viewHolder instanceof HeterogenousAdapter.ImageViewHolder)
                                        swipeFlags = ItemTouchHelper.ANIMATION_TYPE_SWIPE_CANCEL ;
                                    else
                                        swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END ;
                                    return makeMovementFlags(dragFlags, swipeFlags);
                                }
    
                                @Override
                                public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
    
                                }
    
                                @Override
                                public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
    
                                   //when user swiped this method getting call
    
                                    int position = viewHolder.getAdapterPosition();
                                    if (direction == ItemTouchHelper.LEFT){
                                        adapter.removeItem(position);
                                    }else {
                                        removeView();
                                        edit_position = position;
                                        alertDialog.setTitle("Edit Country");
                                        if (objectsArrayList.get(position) instanceof UserInfo){
                                            UserInfo userInfo= (UserInfo) objectsArrayList.get(position);
                                            et_country.setText(userInfo.getFirstName());
                                        }else {
                                            String abc= (String) objectsArrayList.get(position);
                                            et_country.setText("ESHVAR");
                                        }
    
                                        alertDialog.show();
                                    }
                                }
    
                                @Override
                                public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
    
                                     //when swiped started what you wants to do
                                     //Here you can set Red color with icon on it
    
                                    Bitmap icon;
                                    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE){
                                        View itemView = viewHolder.itemView;
                                        float height=(float) itemView.getBottom() - (float) itemView.getTop();
                                        float width =height/3;
    
                                        if (dX > 0){
                                            paint.setColor(Color.parseColor("#388e3c"));
                                            RectF background = new RectF(
                                                    (float)itemView.getLeft(),
                                                    (float)itemView.getTop(),
                                                        dX,
                                                    (float)itemView.getBottom());
                                                    c.drawRect(background,paint);
                                            icon = BitmapFactory.decodeResource(getResources(),R.drawable.action_search);
                                            RectF icon_dest = new RectF(
                                                                    (float)itemView.getLeft()+width,
                                                                    itemView.getTop()+width,
                                                                    (float)itemView.getLeft()+2*width,
                                                                    (float)itemView.getBottom() - width);
                                            c.drawBitmap(icon,null,icon_dest,paint);
                                        }else {
                                            paint.setColor(Color.parseColor("#d32f2f"));
                                            RectF background = new RectF(
                                                    (float)itemView.getRight()+dX,
                                                    (float)itemView.getTop(),
                                                    (float)itemView.getRight(),
                                                    (float)itemView.getBottom());
                                            c.drawRect(background,paint);
                                            icon =BitmapFactory.decodeResource(getResources(),R.drawable.action_search);
                                            RectF icon_dest=new RectF(
                                                    (float)itemView.getRight()-2*width,
                                                    (float)itemView.getTop()+width,
                                                    (float)itemView.getRight() - width,
                                                    (float)itemView.getBottom() - width);
                                            c.drawBitmap(icon,null,icon_dest,paint);
                                        }
                                    }
                                    super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
                                }
                            };
    
    
        //Adding Recycle view to Item touch helper
        ItemTouchHelper itemTouchHelper=new ItemTouchHelper(simpleItemTouchCallback);
                            itemTouchHelper.attachToRecyclerView(recyclerView);
    

相关问题