Показать сообщение отдельно
Старый 21.09.2017, 21:04   #785
pine
Пользователь
 
Регистрация: 26.12.2013
Возраст: 43
Город: Москва
Регион: 77, 97, 99, 177
Машина: Mercury Mariner 2.5 2011
Сообщений: 99
pine is just really nicepine is just really nicepine is just really nicepine is just really nice
По умолчанию

Я тут немножко полностью перелопатил код для адаптера кнопок. Используется все та же библиотека Tablet, но структура кода больше похожа на классическую реализацию конечного автомата. Да, так длиннее, но как по мне - это более читабельно, чем непонятные числовые флаги Кучка switch-case в функциях состояний - для единообразия. Чуть позже перепишу в типовые функции onPress, onRelease, onHold.

Общий GitHub репозиторий тут

Конкретно исходник скетча тут

Алгоритм работы
- состояние кнопок опрашивается каждые 50 мс
- исходное состояние конечного автомата - NOBUTTON
- если нажали какую-то кнопку, то переходим в состояние соответствующее этой кнопке (см функцию noButton() )
- каждая функция типа noButton(), prev(), next() и т.п. - состояние, параметр buttonState - переход в новое состояние

Как работает с точки зрения пользователя
- если нажали и отпустили кнопки NEXT или PREV быстрее чем 250 мс - переключились между треками
- если держим PREV или NEXT - каждые 250 мс перематываем
- громкость увеличивается или уменьшается каждые 250 мс
- Play/Pause нажимается при отпускании кнопки Play/Pause (для устранения ложных срабатываний)

Alt-Tab и прочее не реализовано ввиду ненужности лично мне, но пулл-реквесты принимаются.
pine вне форума   Ответить с цитированием