Применить дизайн, когда пользователь проводит пальцем и удаляет дизайн на прерванном свайпе - PullRequest
0 голосов
/ 17 марта 2020

У меня есть: RecyclerView, где я могу проводить карты вправо.

Я хочу: Добавить рамку для выбранной карты, пока пользователь удерживает ее палец, чтобы провести пальцем. Однако, как только пользователь пропустит go своего пальца и прервет пролистывание, я хочу, чтобы граница была на расстоянии go.

Я справился до сих пор: Мне удалось реализовать onItemTouchHelper, который позволяет мне менять дизайн во время прикосновения. Во время пролистывания цвет вокруг карты меняется на синий. Но граница только остается, даже если свайп прерван.

Проблема, с которой я столкнулся: Граница не go исчезает, когда пользователь отдает go карты (отмена пролистывания)

Вот мой код:

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

            View itemView = viewHolder.itemView;

            itemView.setRotation(
                    swipeLayoutManager.getAngle() * (dX / recyclerView.getMeasuredWidth()));


            itemView.setBackgroundColor(Color.BLUE);

            }

ПРИМЕЧАНИЕ 1: itemView.setBackgroundColor создает синюю рамку вокруг карты. Но это не go, когда пользователь прерывает свайп, и карта возвращается на место.

ПРИМЕЧАНИЕ 2: Метод itemView.setRotation, который я реализовал здесь, работает только при изменении угла во время пролистывания, но возвращает угол к нормальному значению, как только свипирование прервано. Я не могу реализовать то же самое с границей. Когда я пытаюсь, он применяет цвет только во время удара, но цвета постоянно меняются, создавая какой-то сумасшедший эффект мерцания.

1 Ответ

0 голосов
/ 17 марта 2020

Решена проблема путем создания логической переменной viewBeingCleared и установки ее в false в методе onChildDraw. Затем реализуем метод clearView и возвращаем логическое значение true.

Go к этому сообщению к решению в полном объеме: Почему ItemTouchHelper.Callback onChildDraw будет вызываться после clearView

...