niedziela, sierpnia 08, 2010

AppInventor - tego się da używać :-)

Po ostatnich poprawkach Google AppInventor for Android staje się już realnym narzędziem do robienia prostych programów.

Wróciłem do mojego projektu Planu Lekcji. Dzięki naprawieniu przez Gugielków [mała dygresja, jak pracowałem w Motoroli to zwano nas Motorolanami, w Google pracowników zwą Googlerami, jednak po polskiemu ładniej brzmi wg. mnie Gugielki :-)] komponentu TinyDB nie trzeba już inicjalizować kluczy w "bazie" przed ich użyciem. To pozwala na wyrzucenie brzydkiego guziczka init.
Okazuje się również, że w dość łatwy sposób można sobie zmieniać rozmiary komponentów.....

Dzięki temu Plan Lekcji w wersji AppInventorowej wypiękniał :-)



Dodatkowo pokusiłem się o dodanie mu funkcjonalności, która wcześniej wydawała mi się nieosiągalna, czyli domyślnego wyświetlania planu na aktualny dzień :-)
Tu pojawił się problem, bo zegar co prawda podaje numer dnia tygodnia, a nawet i nazwę, ale jeżeli używamy numeru dnia tygodnia to "po angielsku" tydzień zaczyna się od niedzieli, a gdy użyjemy nazwy dnia to niestety będziemy mieli ją w języku interfejsu...... Co można zmienić i już chyba wiem jak :-) ale to pozostawmy na następną wersję ;-)
Teraz problemem było przeliczenie z dni tygodnia liczonych "po angielsku" na takie nasze, tak by to poniedziałek był pierwszym dniem tygodnia.
Trochę to program skomplikowało :-) "kod" wygląda teraz tak:



Jeśli spojrzycie na drugi "moduł" programu to najstraszniej wygląda tam przeliczanie numeru dnia tygodnia "po angielsku" (1 to niedziela, 7 to sobota) na nasze (1 to poniedziałek, a 7 to niedziela).
Głowy nie dam, że dobrze to liczę, ale późno jest ;-) użyłem "wzoru":

Dnum_pol=((Dnum_eng+6) modulo 7)+1


i jest to chyba najtrudniejszy kawałek "programu".
Ten kod wykonywany jest w obsłudze zdarzenia Timera, chciałem go wykonywać w trakcie inicjalizacji ekranu, ale działało to dziwnie, więc zastosowałem sztuczkę polegającą na tym, że kod wykonuje Timer ustawiony na 10 ms, który zaraz po rozpoczęciu wykonywania kodu jest wyłączany.

Ostatni "moduł" to ustawianie zawartości pola tekstowego tym co odczytane zostanie z bazy i ustalanie nowego rozmiaru dla pola tekstowego tak by guziczki wyglądały ładniej na ekranie.
Ten ostatni "moduł" jest procedurą, która wywoływana jest tak ze zdarzenia wyboru elementu z listy jak i pod koniec obsługi Timera.

Nadal nie jest to wybitnie skomplikowany program, ale AppInventor pokazuje już tutaj swoje pazurki. Niezły efekt przy stosunkowo małym wysiłku.
Choć trzeba znać nadal programistyczne sztuczki, jak ta z dniem tygodnia [i nie chodzi nawet o przeliczenie, a o to, że nie każdy musi wiedzieć, że się w ogóle da to odczytać :-)].

A tutaj aplikacja do pobrania :-) [rozmiar to około 1 MB, niestety AppInventor nadal z tym przegina ;-)].
Tutaj źródła [te dla odmiany malutkie, mają mniej niż 4KB :-)]


Podobne postybeta
AppInventor - pierwsze wrażenia i pierwsze programy :-)
Androidowe boje... ale nie takie morskie ;-)
Na "nie" ;-)
Raport z prac nad ubogą krewną Playtypusa, czyli Kolczatką :-)
Trygonometria trudna