Praktyczny podstawowy kurs Android – menu, dialog, ikona

Jak pisałem poprzednim razem, stworzyłem kurs programowania na Android, na platformę Udemy. Ten wpis, jest drobnym rozwinięciem tego kursu, o informacje jak tworzyć podstawowe AlertDialog-i, edytować menu i zmienić je w menu składające się z ikon. Kilka wpisów tego typu – czyli wprost o tworzeniu aplikacji na Androida, może się zdarzyć, ale nie będą to jedyne tematy, które będą się pojawiały na tym blogu. Posiadanie kursu nie jest niezbędne, do zrozumienia tego o czym tutaj piszę (będę odnosił się do istniejącego kodu źródłowego), ale dalej zachęcam do kupna, najlepiej z tego kodu: https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS w cenie promocyjnej. To tyle tytułem wstępu, zapraszam do artykułu!

Dialog

A właściwie AlertDialog, pod taką nazwą ukrywa się po prostu – wyskakujące okienko. Implementacja w moim przypadku wygląda następująco:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(R.string.dialog_message)
                    .setTitle(R.string.dialog_title)
                    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.dismiss();
                        }
                    });
            AlertDialog dialog = builder.create();
            dialog.show();

Krótko ją omawiając, AlertDialog tworzymy korzystając z wzorca projektowego – builder. Wzorzec ten umożliwia stworzenie obiektu, poprzez ustawianie kolejnych właściwości obiektu, a następnie przez wywołanie metody create (w tym przypadku, metoda ta najczęściej nazywa się build). W ramach właściwości dodaje się też przyciski (positive, neutral, negative), a także interfejs onClick, który jako parametr przyjmuje gotowy obiekt. W naszym przypadku, po kliknięciu ok, ukrywamy okno (metoda dismiss). Po zakończeniu tworzenia obiektu bardzo ważne jest, aby wywołać metodę show. Cały ten blok kodu jest podpięty pod menu kontekstowe (pierwotnie 3 kropki w prawym górnym rogu), które również się zmieniło.

menu dialog

Menu

W trakcie trwania kursu, chyba tylko raz wspomniałem o menu, pora trochę rozbudować te informacje. Menu tworzymy w plikach xml w folderze res/menu. Tam znajdują się domyślnie tworzone „menu per aktywność” (poniższy plik to menu_main.xml), tak wygląda ono obecnie:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="pl.digitalzombielab.udemyandroid.MainActivity">
    <item
        android:id="@+id/action_info"
        android:orderInCategory="100"
        android:icon="@drawable/ic_info_white_48dp"
        android:title="@string/action_info"
        app:showAsAction="always" />
</menu>

Co mamy tutaj interesującego:

  • orderInCategory – oznacza kolejność w jakiej mają być wyświetlane elementy, od lewej do prawej, lub od góry do dołu w zależności od tego jaki sposób wyświetlania wybraliśmy. Kolejność ta jest rosnąca, czyli najpierw wyświetliło by się 100, następnie 200 (gdybyśmy mieli taki parametr), etc.. Liczby te można oczywiście zamienić na 1, 2, 3…
  • icon – ikona, która została pobrana z tego serwisu, a następnie rozpakowana, można jej używać tak samo jak w aktywnościach (wspominałem o tym w kursie)
  • showAsAction – oznacza w jaki sposób powinien wyświetlać elementy naszego menu, dostępne możliwości to: [„ifRoom” | „never” | „withText” | „always” | „collapseActionView”]. Wybrany przeze „ifRoom” oznacza, wyświetlaj ikonę, kiedy na pasku znajduje się miejsce. Z racji tego, że mamy tylko jedną ikonę, miejsce znajdzie się zawsze, więc ikona zawsze się wyświetli (moglibyśmy użyć „always”). Poprzednio znajdował się tam parametr „never”, który oznaczał – zawsze zwijaj element do menu kontekstowego. Opis pozostałych elementów znajduje się tutaj.

To by było na tyle, jeśli chodzi o te dwa, podstawowe elementy interfejsu. Nie są skomplikowane, ale w kursie nie wspominałem o nich ani słowa, a że finalnie zostały użyte w aplikacji, chciałem coś o nich napisać. Po za tymi elementami w kodzie pojawiły się też minimalne zmiany kosmetyczne, można je podejrzeć w tym commicie. Oraz oczywiście została wydana aktualizacja, do wersji 1.1. Jeszcze raz zachęcam do kupna: https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS i liczę na to, że niedługo na stronie z kursem przybędzie opinii. Na blogu też wkrótce pojawi się następny tekst.

Stworzyłem kurs na Udemy – Praktyczny podstawowy kurs Android

Dokładnie 4 miesiące, 2 tygodnie i 2 dni, lub po prostu 140 dni minęło od ostatniego wpisu.. Nie mam pojęcia, jak do tego doszło, chyba po prostu musiałem odpocząć po konkursie DSP..? Nie wiem, miałem też w tym czasie kilka innych projektów, oraz wydałem kurs na Udemy. Ale do tego dojdziemy, na początek: witajcie i zapraszam na wpis po tak długiej nieobecności! 😉

Projekty, projekty

Nie było mnie na blogu, ale po za tym nie próżnowałem (a przynajmniej, nie tak bardzo).. Z tytułu wakacji trochę odpocząłem, wyjechałem. Po powrocie zająłem się projektem, który w tym momencie jest zawieszony, ale była to implementacja aplikacji, która za backend wykorzystała by stworzony przez Michała Szafrańskiego plik budżetu. Frontendem miała być aplikacja Androidowa. Być może kiedyś do niego wrócę, nie wiem, na ten moment niestety musiałem z czegoś zrezygnować. Po za tym przygotowałem prelekcję w ramach wydarzenia Toast, ta nosiła tytuł: „Do more with Android” i w sumie pokazywała kilka przepisów jak zautomatyzowałem część swoich codziennych zadań. Osobiście byłem po niej zadowolony tak na pół (częściowo zjadł mnie stres, częściowo zbyt krótki czas ją przygotowywałem), ale pomimo tego, to po żadnej ze swoich poprzednich prezentacji, nie otrzymałem tyle pozytywnego feedbacku, co po tej. Stała się jeszcze jedna ważna rzecz, mianowicie otwarłem własną firmę. W ramach tej zamierzam trochę dorobić sobie do regularnej pensji (ponieważ dalej regularnie pracuję na etacie), mam kilka pomysłów, może co nie co monetyzacji bloga (dostęp do treści pozostanie darmowy, nie będę też blokował treści osobom korzystającym z adblocków – etc, mam inne pomysły). Prawdopodobnie będę starał się stworzyć i sprzedać własny produkt w Google Play Store. Dlatego całkiem możliwe, że będą się tu pojawiały analizy i moje pomysły jak to zrobić, pewnie nawet z wykresami finansowymi i czasowymi, co kosztowało ile mojego czasu i jak na tym wyszedłem, mam nadzieję, że takie materiały się spodobają. Stworzyłem też swój pierwszy kurs na Udemy…

Udemy

No właśnie, jak do tego doszło? Otóż jakiś czas temu odezwał się do mnie Michał – opiekun Udemy na Polskę. Zaproponował stworzenie kursu z ciekawą premią, o której więcej napiszę w podsumowaniu moich dochodów z Udemy w przyszłym miesiącu.. Zgodziłem się i w około 55 godzin wytężonej pracy nagrałem, zmontowałem i dostarczyłem swój pierwszy kurs na Udemy. Kurs ten nazywa się: „Praktyczny podstawowy kurs programowania na system operacyjny Android„. Trwa ponad 7 godzin, skierowany jest do osób które poznały javę i chcą pójść dalej, lub pracują w backendzie a potrzebują stworzyć prostego klienta Android. Plan kursu przedstawia się następująco:

  1. Informacje o kursie, oraz wprowadzenie do systemu Android
  2. Instalacja oraz konfiguracja Android Studio do działania z emulatorami, oraz urządzeniami fizycznymi
  3. Podstawowe elementy designu: button, editText, textView, checkbox, wprowadzenie praktyczne, oraz wykorzystanie biblioteki butterknife
  4. Obsługa pamięci w systemie Android, shared preferences, przekazywanie danych w intencji pomiędzy aktywnościami
  5. Omówienie layoutów, jak było, jak jest i dlaczego powinniśmy używać „constraint layout”, omówienie sposobu jego działania
  6. Aplikacja lista zakupów – od designu do implementacji, nauka korzystania z list, spinerów oraz adapterów w systemie Android
  7. Aplikacja do rysowania – implementacja, omówienie poszczególnych elementów
  8. Wątki w Androidzie, implementacja metodą AsyncTask
  9. Pobranie kodu źródłowego strony internetowej, oraz korzystanie z API (typu json-rest), automatyczne parsowanie wyników na automatycznie wygenerowany model
  10. Własny widok, oraz wykorzystanie go
  11. Dokończenie, podpisanie, oraz publikacja aplikacji w sklepie Play
  12. Poprawienie publikacji, zmiana pakietu w Android Studio

Nagrałem nawet filmik promocyjny:

I jak? Jeśli Ci się podoba, chcesz podszkolić się z Androida, to.. Przeczytaj jeszcze kilka zdań i kliknij w link 🙂 Kilka dni temu rozpoczęła się dwutygodniowa wyprzedaż, mam więc w związku z tym kilka ciekawych spostrzeżeń, mianowicie: kiedy kurs zostanie kupiony z mojego linka, to otrzymuję 97% od ceny sprzedaży, w innej sytuacji przychód jest o wiele niższy, w zależności od sytuacji. Będę to jeszcze rozgryzał, jak poprawić te wartości, ale tymczasem zapraszam do kupowania z mojego linka: https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS. Tutaj jest też kolejna ciekawostka, nie mogę ustawić kuponu poniżej ceny minimalnej 35pln, chyba, że oddam kurs za darmo. W tym miejscu chciałem też podziękować Wiktorowi, za moją pierwszą opinię na jego własnym blogu, nie spodziewałem się tak pozytywnej recenzji. Co do samego kursu jeszcze, to zauważyłem, że pojawili się duzi gracze na tym rynku (np videopoint). Aby być konkurencyjnym ze swojej strony mogę zapewnić, że będę aktywnie pomagał i odpowiadał na pytania, które pojawią się w trakcie kursu, chciałbym, żeby pojawiła się tam cała seria o Androidzie, ale jak będzie, zobaczymy. Być może powstanie tam małe centrum androidowego wsparcia, przekonamy się..

Podsumowując chciałem powiedzieć, że brakowało mi pisania. Bardzo nie chciało mi się zacząć, ale po napisaniu tego posta widzę, że siły wracają. Poprzednia edycja konkursu DSP bardzo mnie zmęczyła, ale już jestem z nowymi pomysłami i postami, które mam nadzieję, będą pojawiały się co poniedziałek rano.

Ps, link do Udemy, gdyby ktoś przeoczył:

https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS

Dlaczego warto uczyć się programować – życiowa decyzja

Jakiś czas temu na Slacku rozmawialiśmy sobie o kursach z programowania. Pojawiło się pytanie, kto co poleca, więc ja podesłałem ten zrobiony przeze mnie. I od słowa do słowa, zgadałem się z Kubą. Okazało się, że korzystał z tego kursu, do zrobienia bardzo ciekawej aplikacji. Chyba w życiu nie wpadł bym na taki pomysł, jak on. Projekt był nie tyle trudny technicznie, co wymagał nie lada odwagi, pomysłowości i.. Sami zobaczcie czego jeszcze 😉

Kuba był programistą już kilka ładnych lat, ale nigdy nie tworzył nic na Androida. Miał w głowie pewien plan, który jednak wymagał chociaż podstawowej znajomości tej technologii. Stąd przeszukiwanie kursów i tą drogą trafił właśnie na ten przygotowany przeze mnie. Jak mówi – spędził niecałą godzinę i stworzył aplikację której potrzebował. Nadszedł wieczór, był akurat umówiony z Dominiką. Tego dnia miała urodziny, więc postanowili po imprezie wybrać na wspólny spacer, na świeżym powietrzu, ciepło, romantycznie planowali, żeby wejść na szczyt Równicy – zresztą, robili to już wielokrotnie, ale widok stamtąd zawsze jest piękny. Kuba wspomniał mimochodem, że dzisiaj uczył się trochę programować na Androida, więc Dominika chciała zobaczyć, co takiego udało mu się zrobić. Włączyła aplikację, pojawiło się jej imię i przycisk. Po kliknięciu, wyraz po wyrazie, wyświetliło się pytanie. Kuba w tym momencie wyciągnął pierścionek i uklęknął. I w ten sposób się zaręczyli 😉

Fajna, bardzo fajna historia – tworząc ten kurs nigdy w życiu bym się nie spodziewał, że ktoś wykorzysta przekazywaną przeze mnie wiedzę, aby się… zaręczyć 😉 Tym bardziej miło mi, kiedy ją przeczytałem. Zwłaszcza, że nie wpadł bym na to, żeby klepanie kodu wykorzystać w tak romantyczny sposób. Kolejny punkt za tym, aby uczyć się programować.

Tym radosnym akcentem chciałem życzyć wszystkim wesołych, spokojnych i rodzinnych świąt bożonarodzeniowych, oraz szampańskiego sylwestra 😉 Teraz jest idealny czas, aby wyłączyć telewizor, komputer i spędzić kilka miłych chwil w gronie najbliższych. I cóż, do przeczytania w przyszłym roku!

dlaczego warto uczyć się programować

Pozdrawiam!

Week review #16 – chwila relaksu, nowe projekty, zmiany na Kenis

Kończy się tydzień numer trzydzieści siedem, który upłynął pod znakiem zbierania sił po wrocławskim devoxxie dla dzieciaków 😉 To było bardzo wyczerpujące. Ale przy tym naprawdę satysfakcjonujące 😉 Mamy wielką nadzieję, że w młodych programistach udało się zaszczepić chęć odkrywania technologii i tworzenia fajnych rzeczy 🙂 Po za tym ten tydzień był raczej nastawiony na taki reklas po urlopie i po tym wydarzeniu. Ojj powrót do pracy jest ciężki. Oto co zrobiłem w tym tygodniu.

Po pierwsze, blog się trochę zmienił 🙂 wreszcie dokończyłem moduł subskrypcji email, także śmiało można się zapisywać, albo z menu po prawej stronie, albo z pop-upa. Starałem się go ustawić tak aby był jak najmniej denerwujący, można go wyłączyć klikając gdziekolwiek na ekranie, a ciasteczka zapamiętają, żeby tak szybko ponownie się nie pojawił. Dodatkowo, edytowałem trochę kodu na stronie, w języku PHP o którym nie mam pojęcia. Bardzo pomogła mi w tym książka Gynvaela Coldwinda o nazwie „Zrozumieć programowanie”. Znajduje się tam rozdział, jak korzystając z dedukcji i tego co się umie poruszać się po językach o których nie mamy pojęcia 🙂 Przydało się, jak widać strona dalej działa, czyli pełen sukces 😉

Chciałem jeszcze w kilku słowach podsumować wydarzenie d4k. Mieliśmy z pozostałymi organizatorami w piątek spotkanie gdzie czytaliśmy feedback od kogo tylko udało się go uzyskać, a także spisywaliśmy własne uwagi, kilka rzeczy już wiemy, że zorganizujemy inaczej 🙂 Ale ogólnie odzew jest bardzo pozytywny, około 90% najwyższych ocen, czyli dzieciaki były zadowolone. A to najważniejsze, bo to dla nich organizowaliśmy wydarzenie 😉 I w przyszłym roku też zorganizujemy, niedługo znowu zaczynamy 🙂

d4k_logo

 

Noo dobrze, projekt d4k się skończył, trzeba zaczynać następne rzeczy 😉 Natura nie znosi próżni. Oto czego można się spodziewać w najbliższym czasie:

  • kanał na YT – pierwszy odcinek jest już nagrany, postanowiłem spróbować kolejnej nowej formy, zobaczymy jak mi pójdzie 🙂 został jeszcze montaż, jakieś pewnie animacje, ale o wszystkim będę tutaj informował.
  • kurs Kotlina – pomysł jest taki, aby na bieżąco porównywać go z javą i w ten sposób budować taki jak by dwujęzykowy kurs. Dla osób które znają javę – jako punkt odniesienia. Dla innych, będą mogli jednocześnie próbować zrozumieć dwa języki 🙂 Jestem bardzo ciekawy jak to wyjdzie.
  • aplikacja android + klient webowy – mam w głowie pomysł na aplikację, która rozwiązuje pewien życiowy problem, z którym wielu się boryka. Zrobiłem już mały research, były już takie aplikacje, ale żadna z nich nie miała klienta webowego. I wydaje mi się, że to była ich słabość. Jeśli się uda komercyjnie – super. Jeśli uda się mniej, będę szukał swojej szansy w następnym projekcie 😉 Wszystkie info i pewnie informacja o betatestach – pojawią się tutaj.

Po za tym serwis Kenis dla którego stworzyłem dwa kursy zmienił ich sposób dystrybucji, od tej pory kursy dostępne są w serwisie YouTube w tych dwóch playlistach:

Zachęcam również do zapoznania się z pozostałą ofertą kanału „Samuraj programowania”. Poprzednio serwis pilnował, aby lekcje wykonywać regularnie – codziennie. Teraz jest już nieco inaczej, na yt można oglądać w momencie w którym nam wygodnie. Czy to lepiej, czy gorzej, nie wiem 🙂 Faktem jest, że zapraszam do zapoznania się z nimi 🙂

To by było na tyle, jeśli chodzi o ten tydzień. Był raczej spokojny, nabrałem sił, mam wielką nadzieję, że w nadchodzącym uda mi się rozpocząć wszystkie 3 projekty o których wspomniałem. Co z tego wyjdzie, zobaczymy 😉 Stay tuned!

Pozdrawiam!

AppInventor – jak błyskawicznie i prosto tworzyć aplikacje Android

Podczas weekendowego Devoxx4Kids miałem okazję wygłaszać prelekcję o AppInventorze i szczerze – bardzo mi się spodobało to rozwiązanie 🙂 Dlatego postanowiłem napisać poradnik jak zacząć przygodę. Jest naprawdę łatwo i szybko, ale od początku… 😉

Czym jest AppInventor? Aplikacja została stworzona na MIT, jak pisze na ich stronie głównej jest wizualnym, blokowym narzędziem do tworzenia aplikacji na Android. Brzmi trochę zawile, w praktyce mamy tam po prostu przeciągnij i upuść zarówno dla designu aplikacji, jak i jej logiki.

Aby zacząć tworzyć należy wejść na stronę AppInventor MIT i kliknąć: „Create Apps”. Zostaniemy poproszeni o zalogowanie się na konto Google, które to przechowuje nasze projekty. Po zalogowaniu klikamy „Start new project” i możemy zacząć działać. Aplikacja działa po stronie przeglądarki.

Cały proces tworzenia polega na utworzeniu wyglądu aplikacji, metodą przeciągnij i upuść, oraz dodaniu logiki, tą samą metodą 🙂 Innymi słowy aplikacja składa się z dwóch głównych elementów – edytora wyglądu i blokowego (na kształt scratcha). Po utworzeniu aplikacji możemy ją kilkoma sposobami uruchomić, ale o tym później..

prtscr

Designer składa się z kilku elementów, po lewej mamy klocki które możemy przeciągać do obszaru roboczego (na środku). Po prawej z kolei wyświetlają się aktualnie dostępne na ekranie rzeczy, oraz mamy możliwość ustawienia właściwości dla każdego elementu. Na początek proponuję prostą aplikację w stylu HelloWorld, założenie niech będą takie, że po kliknięciu na przycisk napis HelloWord ma się ukrywać i wyświetlać. Potrzebujemy w związku z tym obiekty button i label.

prtsc2

Blocks (przełącznik znajduje się w prawym, górnym rogu ekranu) z kolei to edytor klocków w stylu scratcha. Tutaj podobnie, po lewej wybieramy czego chcemy użyć, jakiej funkcji, dla przykładu mamy button który dodaliśmy, klikamy na niego i wybieramy „when btn1 click”. Wszystko jasne prawda, nie ma tutaj żadnej magii 😉 W bloku „do” wstawiamy z kolei co ma się wykonać, na powyższym przykładzie jest to „jeśli label jest niewidoczny pokaż go, w przeciwnym razie ukryj”. Czyli klasyczny if. Tamto kółko zębate umożliwia edycję i dodanie np następnego „else”. I tyle, program działa zgodnie z założeniami 🙂

2016_09_14_18_18_09_18_21_28

Ok, ale jak uruchomić aplikację? Mamy na to kilka sposobów, jednym z nich jest wybranie z menu: Build: „save apk to my computer”. Ta opcja pobiera aplikację w formacie apk, następnie należy wrzucić ją do pamięci telefonu, po kliknięciu na nią wyskoczy instalator (ewentualnie może odpytać, czy zezwolić na nieznane źródła, trzeba się zgodzić, aby zainstalować). Instalujemy i gotowe 🙂 Kolejną opcją dzięki której na bieżąco będziemy mogli śledzić zmiany jest uruchomienie emulatora. Aby to zrobić postępujemy według tej instrukcji. Skracając wersję dla Windowsa, pobieramy i instalujemy tą aplikację. Powinna się uruchomić, jeśli nie, startujemy ją ręcznie, aplikacja nazywa się aiStarter. Po uruchomieniu widzimy okienko konsoli i tyle 😉 możemy ją zminimalizować. Wracamy na stronę i klikamy Connect: Emulator. Po chwili uruchomi nam się w systemie emulator, czekamy jeszcze trochę: załaduje system.. Uruchomi aplikację AppInventor i.. Poprosi o to, aby ją zaktualizować 🙂 Zgadzamy się, klikamy install. Po zakończeniu na stronie internetowej z menu Connect: Reset Connection, a następnie znowu :Emulator. Teraz już uruchomi się, wyświetli aplikację i będzie na bieżąco aktualizował jej stan, co jest naprawdę fajne 🙂 Innymi słowy przeciągniemy sobie jakiś element widoku na ekran – od razu będzie to widać na emulatorze. I ostatnia część: uruchomienie na telefonie. Na początek na nasze fizyczne urządzenie pobieramy ze Sklepu Play tą aplikację, a także uruchamiamy tryb debugowania. Aby to zrobić w telefonie wybieramy „Ustawienia”, następnie „Informacje o telefonie” (ścieżka może trochę się różnić w zależności od modelu), a następnie klikamy na „Numer kompilacji”. I tak kilka razy 🙂 W końcu wyskoczy informacja: „Gratulacje, jesteś już programistą”. Wtedy wracamy wyżej i w menu pojawi się nowa fukcja: „Opcje programistyczne”. Wybieramy ją i klikamy „Debugowanie USB”. Uff tyle po stronie telefonu 🙂 Zobrazowałem na gifie:

Teraz podłączamy urządzenie do komputera i.. Prawdopodobnie wyskoczy błąd instalacji oprogramowania 🙂 Aby go naprawić potrzebujemy sterownika nazywanego adb (Android Debug Bridge). W zależności od modelu tutaj również mogą być wariacje, ale z tej strony powinien wystarczyć. Jeśli nie, należy szukać specyficznych pod hasłem adb + nazwa telefonu. Można zainstalować ten sterownik poprzez wybór z menedżera urządzeń czegoś o nazwie „android debug bridge” i opcję aktualizacji sterownika. Albo klasycznie przez dwuklik z instalki, która została pobrana. W przypadku jakichś problemów pomóc może jeszcze ta instrukcja. Po tych wszystkich operacjach na telefonie powinna wyskoczyć informacja: „Czy zezwolić na odcisk cyfrowy tego komputera.” Zaznaczamy: zezwól za każdym razem i klikamy ok. Ufff telefon i komputer zostały połączone mostem do debugowania, że się tak wyrażę 🙂 Na stronie jest jeszcze jedna możliwość połączenia, w menu Build: „provide QR code for .apk”. Zostaje wyświetlony kod QR, po zeskanowaniu przez aplikację w naszym telefonie nasza aplikacja również zostaje pobrana. Ufff dużo możliwości połączenia, pewnie da się tego wymyślić jeszcze więcej (w tym przez WiFi), ale myślę, że tyle na razie wystarczy 🙂 Mi najbardziej podoba się emulator w procesie tworzenia, ponieważ błyskawicznie synchronizuje zmiany wyglądu i logiki.

Noo dobra: zrobiliśmy HelloWorld, podłączyliśmy się, może pora na nieco bardziej ambitną aplikację? 🙂 Założenia są takie: Aplikacja losuje dwie liczby z zakresu (1-10), i dokonuje ich mnożenia. My wpisujemy wynik i klikamy sprawdź. Aplikacja sprawdza czy odpowiedź jest prawidłowa lub błędna, a następnie aktualizuje ilość poprawnych i błędnych odpowiedzi wyświetloną np poniżej. Po czym losuje kolejną parę 🙂 Fakt, że potrzebujemy tutaj takich funkcji jak random oraz zmiennych, o których nic jeszcze nie napisałem, ale to narzędzie jest tak przyjemne, że zachęcam do spróbowania samemu 🙂 Metoda prób i błędów naprawdę świetnie się tutaj sprawdza. A pod przyciskami moje rozwiązanie 😉

[su_spoiler title=”Design” icon=”arrow”]

Kliknij aby zobaczyć w nowej karcie.

Skorzystałem z TableArrangement do utworzenia widoku, dodałem tam 5 kolumn i 4 wiersze. W nich porozkładałem obiekty (domyślny widok umożliwia tylko dodanie elementów pod sobą).

[/su_spoiler]

[su_spoiler title=”Blocks” icon=”arrow”]

Kliknij aby zobaczyć w nowej karcie.

Zacznę może od omówienia zmiennych:

  • gr – dobry wynik
  • r – wynik
  • l1, l2 – wylosowane liczby
  • g – ilość dobrych odpowiedzi
  • b – ilość złych odpowiedzi

Ten fioletowy klocek to procedura – stosujemy kiedy będziemy coś wywoływać więcej niż raz, albo żeby utrzymać logiczny porządek w aplikacji. Ja nazwałem inicjalizacja, ponieważ to tutaj ustawiamy na napisy odpowiednie, wylosowane zmienne, a także ustawiamy pusty tekst na wynik. Wywołujemy tą procedurę podczas utworzenia ekranu, a także po zakończeniu wszystkich operacji kiedy klikniemy przycisk. A po kliknięciu przycisku następuje:

  • przypisanie do zmiennej r tekstu wpisanego przez użytkownika, dodatkowo obciętego ze spacji z obydwóch stron (trim)
  • przypisanie do zmiennych l1 i l2 tekstu który został wylosowany wcześniej
  • przypisanie do zmiennej gr wyniku który jest prawidłowy
  • porównanie, czy wynik użytkownika i prawidłowy wynik są takie same
    • jeśli tak, ustawienie zmiennej dobra odpowiedź na wartość o jeden wyższą
    • jeśli nie, ustawienie zmiennej zła odpowiedź na wartość o jeden wyższą
  • ponowne wywołanie funkcji inicjalizacji.

I to tyle, aplikacja działa bez błędów:)

[/su_spoiler]

To by było na tyle, jeśli chodzi o wprowadzenie do AppInventora. Aplikacja daje nam mnóstwo możliwości o których nawet nie wspomniałem, np tworzenie prostych gier. Jeśli nie mamy pomysłu warto poszukać przykładowych projektów na YouTube, albo zerknąć na aplikacje miesiąca. No i zachęcam do spróbowania, to naprawdę fajna przygoda bez względu na to, czy nigdy nie programowałeś, czy jesteś uber-pro devem 🙂 Korzystając z chwili uwagi, utworzyłem usługę mailingu i zachęcam do dołączenia, po prawej stronie zostawiając maila i klikając subscribe 🙂 Dzięki temu informacje o nowych postach będą wędrowały prosto na skrzynkę pocztową. Ale przed wszystkim zachęcam do podzielenia się projektem z AppInventora, chętnie odpowiem w komentarzach, jeśli coś będzie niejasne.

Pozdrawiam!

Null budget exception – android app

Ostatnio napisałem o tym, że najważniejszą umiejętnością jaką możemy posiąść jest wiedza o tym, jak rozdzielać zadania pomiędzy tym co wykonujemy sami, a tym co powinniśmy oddelegować. Stworzyłem także taką małą aplikację do kształtowania nowych nawyków. Jeśli chodzi o nią, to nie wydałem podczas jej powstawania ani złotówki. Dzisiaj chciałem opisać jak to zrobiłem, aby jedynym moim kosztem był czas. I to najlepiej nie za dużo czasu 😉

Po pierwsze zewnętrzne biblioteki. Kiedy zerkniecie na aplikację, na starcie jest dostępny naprawdę ładny kalendarz. Nie jestem jego autorem, skorzystałem z gotowego komponentu dostępnego tutaj. A tak wygląda zrzut z mojego pliku gradle:

    compile 'com.jakewharton:butterknife:7.0.1′
    compile 'com.prolificinteractive:material-calendarview:1.4.0′
    compile 'petrov.kristiyan.colorpicker:colorpicker-library:1.1.0′
    compile 'com.github.javiersantos:MaterialStyledDialogs:1.4.1′
    compile 'com.github.PhilJay:MPAndroidChart:v2.2.5′

Wszystkie biblioteki których użyłem znalazłem na stronie android-arsenal. Jak już znalazłem wszystko co oszczędzało mi pracę, to po prostu przeczytałem trochę dokumentacji i mogłem korzystać. Bardzo ładnie zintegrowały się z Android Studio, i zostało mi o wiele mniej linii kodu do napisania 😉

Ale aplikacja, to nie tylko kod. Po za tym trzeba by jeszcze dorobić jakąś grafikę. Część grafik była we wcześniej pokazanych bibliotekach. Do ikon na toolbarze użyłem tych dostępnych na stronach design google, z kolei ikona aplikacji pochodziła ze strony flat-icon konkretnie stąd. Tutaj wymogiem było umieszczenie w about informacji o autorze, co też zrobiłem 😉 A z pozostałymi rzeczami graficznymi, np tymi potrzebnymi do sklepu Play poradziłem sobie sam, edytując choćby w paincie te elementy.

Ok, to mamy kodzik, mamy jakąś grafikę. Pozostał filmik promocyjny, który zawsze jest mile widziany. To również udało mi się zrobić, użyłem aplikacji shotcut. Ale skąd wziąłem elementy do tego filmiku? Elementy własnej aplikacji, które tam pokazuję nagrałem sobie sam 😉 Z kolei całe tło składające się z tych różnych biegaczy pobrałem ze stron videezy, oraz videvo, które udostępniają takie fragmenty za darmo 😉 Potem oczywiście odpowiedni montaż, podłączenie muzyki (Dave Depper „Motivational Beat” – „Compositions 2” ze strony freemusicarchive, oczywiście za darmo). I efekt końcowy jest taki:

I jak, wyszło w porządku, czy jednak czuć, że profesjonalista tego nie montował? 😉

Reasumując tak wyglądał mój przepis na w porządku wyglądającą aplikację, która kosztuje trochę czasu, ale za to ani złotówki 😉 Wydaje mi się, że jest on całkiem uniwersalny, także gdyby ktoś chciał tak samo jak ja, to polecam 😉 Można też oczywiście oddelegować część zadań, ważne, żeby ten wybór był świadomy 😉

Pozdrawiam!

Don’t break the chain

Don’t break the chain to technika motywacyjna, w której chodzi o to, że wykonujemy jakąś czynność każdego dnia. Po wykonaniu jej (to może być cokolwiek, bieganie, ćwiczenia fizyczne, granie na instrumencie, nauka frameworka, po prostu cokolwiek). Odznaczamy ten fakt w kalendarzu. Swój przykładowy kalendarz pokazałem tutaj. Ale to nie wszystko, zrobiłem też aplikację: „Nie przerywaj łańcucha” 😉

W aplikacji możemy tworzyć dowolną liczbę łańcuchów, nadawać im kolory, a następnie zaznaczać w kalendarzu, czy udało nam się wykonać daną czynność, czy nie. W momencie w którym mamy już na przykład 5 dni pod rząd, to po prostu, pomimo braku chęci zmuszamy się aby zrobić to po raz szósty. W ten sposób kształtujemy nowe nawyki, potrzeba około 90 dni, aby coś weszło nam w krew 😉

Do tego mamy dostępnych kilka statystyk, które pokazują jak wygląda postęp w danym zadaniu, a także porównują je z innymi zadaniami.
Na koniec mogę jeszcze pokazać filmik reklamowy.
Zapraszam do pobierania ze sklepu Play, nie zapomnijcie zostawić kilku gwiazdek 🙂
https://play.google.com/store/apps/details?id=pl.digitalzombielab.dontbreakthechain
Pozdrawiam!

Prelekcja Android View Morphing na Toast Wrocław

To już! Prelekcja do której przygotowywałem się od kilku tygodni odbędzie się już wkrótce!

Kiedy?
07.07.2016, czwartek 18:30-20:30

Gdzie?
PROZA
Przejście Garncarskie 2, 50-150 Wrocław

Bardzo serdecznie wszystkich zapraszam!
Prelekcja odbędzie się w ramach wydarzenia Toast którego organizatorami są Droids On Roids.

Temat?
Android View Morphing

Czyli będę opowiadał o tym, jak z dowolnych grafik w Androidzie stworzyć sobie np taką animację:
albo np taką:

Będzie zdecydowanie praktycznie i mam nadzieję, że temat przedstawię lekko i zrozumiale 😉
Jako zajawkę wrzucam tutaj swoje intro:

Wszystkie informacje znajdują się tutaj, gdzie klikamy też przycisk „Wybieram się”. Po za moją odbędą się jeszcze dwie prelekcje: Waldemara Zubika oraz Karola Wrótniaka. Dodatkowo organizatorzy zapowiadają niespodzianki. Będzie super, jeszcze raz serdecznie zapraszam! 😉

Pozdrawiam!

#20 Finał zmagań w konkursie DSP – podsumowanie

Noo i stało się. Jest to ostatni wpis w konkursie „Daj się poznać”. Jak pisałem, wcześniej, projekt nie został ukończony, ale nie to było celem. Jest stabilny, aby chwilę się pobawić i ma solidną bazę, aby móc dodawać kolejne zadania.

Ostatnimi rzeczami, które poprawiałem w tej wersji jest wymuszenie poziomej orientacji, poprzez dodanie w manifeście parametrów:

android:screenOrientation="landscape"
android:configChanges="keyboardHidden|orientation|screenSize"

Drobne poprawki w wyglądzie, np w tym miejscu:


I jakieś szybkie poprawki w kodzie, tak jak mówiłem, stabilizacja.

Skompilowany plik APK można pobrać z tego linku.
Z kolei kod źródłowy w wersji dotyczącej tego wpisu znajduje się tutaj.

W tym wpisie chciałem trochę podsumować, co dał mi udział w konkursie DSP. Na początek może tabelka z wszystkimi wpisami:

Trochę postów się tutaj pojawiło 😉 W związku z tym czuję, że chyba z czasem poprawiałem ich jakość, czyli rozwinąłem się jako bloger. Do tego udało się całkiem sporo zrobić w projekcie, przygotować API pod nowe zadanka. Poprawiłem trochę swoje umiejętności kodowania, zacząłem używać choćby butterknife, albo poprawiać grafiki przy pomocy 9-path. Założyłem snapchata w ramach projektu snapchat for developers (szukaj migellal jbc 😉 Ale najlepsze było community wokół konkursu, gorące rozmowy na Slacku, na każdy temat. Szczerze mówiąc nigdy bym nie pomyślał, że przeprowadzę tyle ciekawych rozmów z osobami ze środowisk .NET, czy Ruby 😉 Ani w ogóle, że poznam tyle fajnych osób z tego środowiska, wszystkim którzy się tam udzielali chciałbym bardzo podziękować, fajnie, że byliście, mam nadzieję, że te kanały na Slacku nie umrą po gali finałowej 😉
W ostatnim akapicie chciałem podziękować Maciejowi za zorganizowanie tego konkursu, oraz Wam, czytelnikom, że tak chętnie tu zaglądaliście 😉 To był naprawdę świetny pomysł, nauczyłem się i zrozumiałem sporo nowych rzeczy! 😉 A co do przyszłości bloga, cóż… Wkrótce wpis na ten temat 😉 Mam nadzieję, że zostaniecie ze mną 😉
Pozdrawiam!

#19 Szybkie rozszerzanie funkcjonalności

Zbliżamy się do końca konkursu DSP, to już przedostatni wpis, noo i trzeba pomyśleć o jakiejś stabilizacji. Aplikacja nie będzie ukończona do dwudziestego wpisu, ale w jakiś sposób musi działać. Finalnie pewnie będzie ukończona we wrześniu, nie będę nad nią działał sam 😉 Dzisiaj dodałem kod odpowiedzialny za uruchamianie zadań praktycznych, testów i customowych prób. Kod dla funkcjonalności porównywania i dodawania. Najwięcej czasu zajęły poprawki w wyglądzie i obsługa nowych przycisków, reszta poszła błyskawicznie, dzięki zaimplementowaniu wielu rzeczy w nadklasie. Szybki rzut oka na aplikację:

Więcej funkcji się już niestety nie pojawi, następny wpis będzie o drobnych poprawkach w wyglądzie, etc. Ale skupmy się na tym co dodałem, czyli np funkcji porównywania z opcją ustawienia sobie czasu i ilości odpowiedzi:

Kodzik głównie dziedziczy, te funkcjonalności się powtarzają, więc w sumie czemu nie 😉 Spójrzmy np na to:

@Override
@OnClick(R.id.successView)
public void onClickSuccessView() {
    if (operation.nextPoint(true))
        nextActivity(true, CompareCheckActivity.this);
    else
        onClickCommon();
}

@Override
@OnClick(R.id.failureView)
public void onClickFailureView() {
    if (operation.nextPoint(false))
        nextActivity(false, CompareCheckActivity.this);
    else
        onClickCommon();
}

@Override
@OnClick(R.id.fab)
public void onClickFab() {
    if (!isScreenFiled()) {
        stopTime();
        fillScreen(counterRight == counterLeft, true);
    } else {
        if (counterRight == counterLeft)
            onClickSuccessView();
        else
            onClickFailureView();
    }
}

@Override
public void onClickCommon() {
    stackBricksElementsOperation.hideStack(bricksLeftArray);
    stackBricksElementsOperation.hideStack(bricksRightArray);
    unFillScreen(counterRight == counterLeft, true);
    createReadyView();
}

Jak już pisałem wcześniej, mamy tutaj interfejs operation który decyduje którą implementację wybrać. Metoda nextPoint odpowiada true, jeśli mamy wystartować następną aktywność, lub false jeśli wyczyścić ekran i wykonać inne operacje, które mamy opisane w jednej metodzie: onClickCommon. Ważne aby wyczyścić ekran, zanim wylosujemy następne numery. Animacja się rozpocznie w osobnym wątku, i wszystko zdąży się wykonać, zanim zauważymy zmiany. To bardzo fajna cecha, nie trzeba o tym myśleć i przydatna w większości przypadków. Ale niestety nie we wszystkich, np trzeba pamiętać, aby wyłączać parametr clickable na elementach, kiedy uruchamiamy jakąś długo trwającą animację i nic ma jej nie przerywać.

Jak widać czasem przygotowanie sobie dobrego API, i wydzielenie kodu który się powtarza niejednokrotnie trwa dłużej, niż faktyczne korzystanie z niego. I wydaje mi się, że to dobra droga, w przypadku rozrastania się programu, o wiele łatwiej można dodawać nowe funkcje.

Projekt na Github.

Pozdrawiam!