У меня возникли проблемы с 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
и вручную вернуться к нормальному состоянию, когда выпущен .
Спасибо.