Как удалить элемент в режиме ресайклера с помощью свайпа с эффектом отскока - PullRequest
0 голосов
/ 08 мая 2020

Я знаю, что удалить элемент просмотра ресайклера, проведя пальцем по экрану с помощью ItemTouchHelper.SimpleCallback, можно сразу. Но я хочу добавить больше функций.

  1. Если пользователь потянет влево элемент на определенное расстояние, элемент будет удален.
  2. Если пользователь не потянул влево больше, чем на определенное расстояние , элемент останавливается, пока справа не появится кнопка «удалить»

Как я могу измерить расстояние, которое тянет пользователь ?? onChildDraw() метод меня смущает. Я пробовал это.

override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
    var dx = Math.max(dX, -300F)    // -300F is 'delete' button width
    // I thought the item view of recycler view would be farther away from the right wall by the larger of of dX and -300F
    super.onChildDraw(c, recyclerView, viewHolder, dx, dY, actionState, isCurrentlyActive)
}

1 Ответ

0 голосов
/ 08 мая 2020

Вы должны добавить View.OnTouchListener. Примерно так:

    // in the creation of the view holder
    view.setOnTouchListener(new View.OnTouchListener() {

        private int downX = 0;
        private int upX = 0;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()){
                case MotionEvent.ACTION_DOWN:{
                    downX = event.getX();}
                case MotionEvent.ACTION_UP:{
                    upX = event.getX();

                    float deltaX = downX - upX;

                    if(deltaX>300F){
                       swipeToLeft();
                       return  true;
                    }
                }
            }

            return false;
        }
    });
...