Как я могу прослушивать события щелчка в ItemTouchHelper RecyclerView?

Кто-нибудь может научить меня, как я могу добавить событие действия, когда пользователь нажимает значок «Изменить» на ChildDraw в ItemTouchHelper?

В настоящее время, когда пользователь смахивает элемент, отображается цвет фона и значок. Я хочу добавить действие, когда пользователь смахнет ВПРАВО и коснется изображения «R.drawable.ic_vector_edit».

Можно ли как-нибудь добавить к этому событие? ...

        ItemTouchHelper helper = new ItemTouchHelper(
            new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
                @Override
                public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                    final int fromPos = viewHolder.getAdapterPosition();
                    final int toPos = target.getAdapterPosition();
                    adapter.notifyItemMoved(fromPos, toPos);

                    return true;
                }

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

                    // RIGHT to LEFT :: delete item
                    if (direction == ItemTouchHelper.LEFT) {
                        final int fromPos = viewHolder.getAdapterPosition();
                        Item myItem = adapter.getItemAtPosition(fromPos);

                        // delete the item
                        mItemViewModel.deleteItem(myItem);
                    }
                }

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

                    float mdX = dX;
                    Bitmap bitmap;

                    if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
                        // Get RecyclerView item from the ViewHolder
                        View itemView = viewHolder.itemView;
                        Paint p = new Paint();
                        float width = itemView.getHeight() / 5;

                        // LEFT to RIGHT :: edit item
                        if (dX > 0) {
                            mdX = dX / 5;
                            /* Set color for positive displacement */
                            int color = ContextCompat.getColor(getContext(), R.color.colorDarKGreen);
                            p.setColor(color);

                            // Draw Rect with varying right side, equal to displacement dX
                            c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), mdX,
                                    (float) itemView.getBottom(), p);

                            bitmap = ResourceUtil.getBitmap(getContext(), R.drawable.ic_vector_edit);
                            float height = (itemView.getHeight() / 2) - (bitmap.getHeight() / 2);

                            c.drawBitmap(bitmap, (float) itemView.getLeft() + width, (float) itemView.getTop() + height, p);
                        } else { // RIGHT to LEFT :: delete item
                            /* Set color for negative displacement */
                            int color = ContextCompat.getColor(getContext(), R.color.colorDarkRed);
                            p.setColor(color);

                            // Draw Rect with varying left side, equal to the item's right side plus negative displacement dX
                            c.drawRect((float) itemView.getRight() + dX, (float) itemView.getTop(),
                                    (float) itemView.getRight(), (float) itemView.getBottom(), p);

                            bitmap = ResourceUtil.getBitmap(getContext(), R.drawable.ic_vector_delete);
                            float height = (itemView.getHeight() / 2) - (bitmap.getHeight() / 2);

                            c.drawBitmap(bitmap, (float) itemView.getRight() - (bitmap.getWidth() + width), (float) itemView.getTop() + height, p);
                        }
                        super.onChildDraw(c, recyclerView, viewHolder,  mdX, dY, actionState, isCurrentlyActive);
                    }
                }
            });
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
2 176
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте использовать setOnTouchListener на RecyclerView для прослушивания следующих событий касания:

@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) {
         ...

         if (dX > 0) {
             ...

             recyclerView.setOnTouchListener((v, event) -> {
                 int left = itemView.getLeft() + width;
                 int top = itemView.getTop() + height;
                 int right = left + bitmap.getWidth();
                 int bottom = top + bitmap.getHeight();

                 if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE &&
                     event.getAction() == MotionEvent.ACTION_DOWN &&
                     event.getX() >= left && event.getX() <= right &&                  
                     event.getY() <= bottom && event.getY() >= top
                    ) {
                    // Do what you want to do here...
                    onEditClicked(viewHolder.getAdapterPosition());
                }
                return false;
            });

         } else {
             ...
         }
     }
}

Другие вопросы по теме