自定义滑动ItemTouchHelper

时间:2016-10-22 08:51:25

标签: android listview swipe

您好我已经将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 个答案:

答案 0 :(得分: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);