Обещанного 3 года ждут. А план таков, что программку для детей мы всё-равно еще не скоро допишем (сомневаюсь что есть смысл её дописывать).
Поэтому давайте зафигачим что-нибудь простенькое и бесполезное. Например что-то типа эмулятора кнута Индианы Джонса. As seen on tv. Типа того, что показывали в Теории Большого Взрыва много лет сезонов назад. Только вместо кнута будем использовать колокольчик. А назовём проект LazyShaker.
Для тех, кто предпочитает не засорять сознание ситкомами расскажу суть. Программка должна воспроизводить звук при встряхивании. Всё. Способы применения - самые разнообразные, но в основном одинаково бесполезные и ограничивающиеся привлечением внимания.
Исходный код проекта я выложил на github. А собранное приложение на Google Play.
Под катом объяснение того как всё это работает.
Работа с сенсором
Для отслеживания встряхивания воспользуемся компонентом TMotionSensor. Опрашивать сенсор будем по таймеру (как это показано в демке), каждые 5 миллисекунд.
Сделаем свой класс TLazyShakeSensor реализующий следующий интерфейс:
TLazyShakeSensor = class
public
procedure InitSensors;
procedure DeInitSensors;
property OnShake: TNotifyEvent read FOnShake write FOnShake;
end;
Внутри класса спрячем:
FMotionSensor: TMotionSensor;
FTimer: TTimer;
// обработчик события OnTimer для таймера
procedure DoOnSensorDataChanged(Sender: TObject);
// а этот метод будет вызывать событие OnShake
procedure DoTriggerShakeEvent;
Воспроизведение звука
А для воспроизведения звука - нам вполне хватит стандартного TMediaPlayer-а. Просто бросим компонент TMediaPlayer на форму. Также сделаем метод PlayDefaulSound - который будет проигрывать звук.
Сам звук добавим в проект через Deployment Manager. Это будет mp3 файл, который я нашёл через find-sounds.org. Для добавленного файла изменим destination path с .\ на .\assets\internal. См. скриншот ниже.
Внутри формы создадим экземпляр класса TLazyShakeSensor и назначим ему обработчик события. В качестве обработчика просто объявим в коде формы свою процедуру с сигнатурой как у типа TNotifyEvent (procedure ProcName(Sender: TObject)). Из обработчика будем вызывать метод формы PlayDefaultSound;
GUI
Нам нужна возможность полностью закрыть программу, чтобы она не продолжала работать в фоне и не звенела при ходьбе. Для этого добавим на форму кнопку, к которой прикрепим стандартный action TFileExit.
А чтобы форма не пустовала, добавим туда TImage с картинкой. Картинку возьмём в png формате на сайте OpenClipart (лицензия Public Domain). hint: Размер картинки выбирайте сами какой хотите. Здесь я не советчик, так как до сих пор не понимаю, каким образом эта картинка будет масштабироваться на устройствах с разным разрешением. Идеальным вариантом, конечно был бы использовать SVG, но к сожалению, ни android ни firemonkey такой возможности не предоставляют.
Комментариев нет:
Отправить комментарий