MotionEvent ACTION UP Невозможно обнаружить долгое нажатие - PullRequest
0 голосов
/ 15 марта 2019

У меня возникли проблемы с MotionEvent.Я хочу показать изменения фона, когда пользователь нажимает кнопку (но еще не отпустила) , поэтому OnClick может не помочь.Я заметил, что MotionEvent может обнаружить нажатие и отпускание.

В результате я реализовал простое событие onTouch, как показано ниже:

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                // Make Background Changes

                Log.i("DOWN", String.valueOf(getAdapterPosition()));
                sparseBooleanArray.put(getAdapterPosition(), true);
                notifyItemChanged(getAdapterPosition());

            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                // Revert background to normal

                Log.i("UP", String.valueOf(getAdapterPosition()));
                sparseBooleanArray.put(getAdapterPosition(), false);
                notifyItemChanged(getAdapterPosition());
            }
            return false;
        }

Это означает, что когда я нажимаю ->Фон становится зеленым

И когда я отпускаю -> Возвращается к исходному (белому).

Хорошо работает при обычном щелчке , но при попытке длительное нажатие , DOWN вызывается, но когда не вызывается релиз UP.

Так что мне нужно выполнить обычный щелчок снова, чтобы вернуть фон в нормальное состояние.

Это оригинальный дизайн, и мне нужно использовать OnLongClickedListener и вручную вернуться к нормальному состоянию, когда выпущен .

Спасибо.

1 Ответ

1 голос
/ 15 марта 2019

Будет проще использовать список состояний в качестве фона для вашего элемента, используя нажатое состояние. Смотри https://developer.android.com/guide/topics/resources/drawable-resource#StateList

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
           android:drawable="@color/colorGreen" />
    <!-- This is the default state item, at the end of the list -->
    <item android:state_pressed="false"
           android:drawable="@color/colorWhite" />
</selector>
...