Как ограничить или отключить клики / сенсорные события на определенное количество времени в Android? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть приложение, в котором я анимирую несколько просмотров по клику.

Однако, пока анимация продолжается, все еще можно инициировать другие события по щелчку, что в конечном итоге вызывает множество проблем с анимацией. Мне нужно было бы сделать так, чтобы новая анимация не запускалась, пока идет какая-то определенная.

Допустим, анимация тасует кликабельные виды на экране. Как сделать так, чтобы пользователь не мог инициировать новую команду щелчка в течение x времени, где x может быть продолжительностью анимации или каким-либо другим решением с аналогичными результатами.

Я просто даже не уверен, что я ищу, когда дело доходит до терминологии. Какие области я должен изучить, чтобы манипулировать пользовательским вводом, как это? Любой хороший источник по этой теме также приветствуется.

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Вы всегда можете отключить событие click с флагом и включить его снова, когда анимация закончится.Это не идеальное решение, но в большинстве случаев оно работает достаточно хорошо.

Например, если вы используете Animator для анимации, вы можете сделать что-то вроде этого:

private boolean isClickEnabled = true;

...

@Override
public synchronized void onClick(View v) {
    if (isClickEnabled) {
        // We disable the click, which will be enabled again when the animation ends
        isClickEnabled = false;

        ...

        animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                // We enable the click again now that the animation has finished
                isClickEnabled = true;
            }
        });
        animator.start();
    }
}

То же самое относится и к классу Animation, но вместо AnimationListener.

Обратите внимание, что вместо сохранения локального логического значения вы можете просто отключить и включитьщелчок по представлению с использованием view.setClickable(true/false) - это действительно зависит от того, что вам нужно, и от вашей реализации, но основная идея остается той же.

0 голосов
/ 12 апреля 2019

, если вы хотите на некоторое время заблокировать касание, попробуйте реализовать Runnable или runonuithread, а затем любое другое представление, которое вы хотите заблокировать, используйте метод view.setClickable (false).

...