Gimnastyka z LWUIT w j2me

Z racji mojego braku mobilności i konieczności regularnego powtarzania ćwiczeń gimnastycznych w określonym cyklu wpadłem na pomysł programu, który z jednej strony pozwoli odciążyć mózg (mój, oczywiście Winking) a z drugiej strony umożliwi prowadzenie kulturalnej dysputy na sali ćwiczeń. Ponieważ te powtórki muszę wykonywać nie tylko w domowym zaciszu, ale także na wspomnianym wygnaniu, to padło na komórkę. A ponieważ spodobał mi się wspominany już framework LWUIT, to stwierdziłem "czemu nie?" Happy
Podstawowy pomysł był prosty jak konstrukcja cepa: miał mi sygnalizować upływ kolejnych 8 sekund (zastępując uciążliwe ciągłe liczenie do ośmiu...). A skoro już, to może niech też zlicza czas, w którym te odliczania trwały. No dobra, ponieważ ekran zakrywa całość, to niech pokazuje też aktualny czas... W ten sposób zacząłem wyliczać co bym chciał, żeby robił. Po pierwszych próbach doszło jeszcze, że przydałaby się regulacja głośności.

Po tych wszystkich rozważaniach doszedłem do wniosku, że powinno to wyglądać mniej więcej tak jak na obrazku obok. Guzik od pauzy powinien wymieniać się z ikoną "play" symbolizując możliwość uruchomienia i wstrzymania odliczania. Ikony koło głośnika to oczywiście regulacja głośności.
Jako ikony wykorzystałem stare dobre ikony udostępnione przez SUN'a, ze standardowego zestawu. Ponieważ postanowiłem wykorzystać LWUIT i dysponuję Samsungiem SGH-F480, to oczywiście aplikacja powinna reagować na dotyk, zatem pasek klawiszy powinien być ukryty (patrz:
jak to zrobić).
Całość rozwiązania okazała się być całkiem prosta i skupiła się na kilku zagadnieniach: - liczniku czasu, który będzie odmierzał upływające sekundy (tak na prawdę dwóch: jednego dla zegara, drugiego dla stopera), - jak rozmieścić elementy na ekranie - jak odtworzyć muzyczkę (czyli rozpracować zasoby, załadowanie do playera i uruchomienie) - jak regulować głośność. W kwestii timerów to istotny był fakt, żeby nie tylko odliczał kolejne 1000 ms, ale żeby wywoływana metoda była wywołana co kolejne 1000ms, niezależnie od tego ile trwała obsługa czy inne - poza aplikacyjne - zajęcia wykonywane przez aparat. Tu z pomocą przyszedł standardowy
java.util.Timer, java.util.TimerTask oraz metoda scheduleAtFixedRate(timerTask, 0, 1000). Rozmieszczenie elementów okazało się banalne - o ile ktoś jest zaznajomiony ze swingiem. Przydatne oczywiście jest klasa Form z pakietu com.sun.lwuit oraz BorderLayout, FlowLayout oraz BoxLayout z com.sun.lwuit.layouts. Zasoby i odtwarzanie muzyczki, podobnie jak regulacja głośności - równie banalna, z pomocą javax.microedition.media.* Acha, zgodnie z zaleceniami ułatwiającymi operowanie gołymi paluchami do poszczególnych guzików dorzuciłem obręb o szerokości 8 punktów:
boolean isTouchScreenDevice = Display.getInstance().isTouchScreenDevice();
if (isTouchScreenDevice) {
getStyle().setPadding(8,8,8,8);
}

Aplikacja powstała na szybko i wygląda całkiem podobnie do pierwotnych założeń. Jeżeli ktoś chce zgłębić jej prostotę (wynikającą z wykorzystania LWUIT), to można pobrać pełen kod źródłowy: src.zip. Cała aplikacja, gotowa do umieszczenia na komórce też jest do pobrania: - TrainingAssistant.jad - TrainingAssistant.jar (uwaga: ze względu na LWUIT, z którego nic nie wycinałem rozmiar pliku to 438KB)
I na zakończenie luźna uwaga. Jak ktoś mnie zna, to zapewne się domyśli, że to tylko próbka. W czasie "wyczerpujących" ćwiczeń pomysł rozrósł się do dużo większych rozmiarów, w którym można definiować zestawy ćwiczeń, poszczególne odcinki, powtórzenia, zdarzenia po kolejnych fragmentach itp itd. Ale pewnie z braku czasu nigdy nie powstanie...
blog comments powered by Disqus