180 minút s Androidom: 2. stretnutie [Obesenec]

Hra Obesenec/Hangman

Cieľ

Cieľom stretnutia je vytvoriť hru Obesenec (Hangman). Využijeme pritom

  • obrázky realizované ako resources
  • naučíme sa základy životného cyklu aktivity a zistíme, prečo v Androide neexistuje zatváracie tlačidlo
  • ukážeme si, ako možno využívať bežný Java kód
  • naučíme sa notifikovať používateľa pomocou toastov.

Materiály

Kostra projektu

  • stiahnite si kostru projektu
  • obsahuje štandardnú Java triedu s kódom logiky hry
    • ak trieda využíva len veci z JDK 5 a novšej, dá sa bez problémov vložiť do projektu
    • toto je príklad, keď sa zdroják prekompiluje do .class a následne do .dex
  • plus ukážkové PNG obrázky pre šibenicu

GUI

  • venujme sa minimalistickej verzii:
    • label TextView pre uhádnuté písmená
      • neuhádnuté indikované podtržníkmi
    • textové políčko EditText pre zadávanie textu
      • maximálna dĺžka 1 (nastaviteľné v layoute)
    • obrázok ImageView pre obrázok šibenice
  • po kliknutí na šibenicu sa vyhodnotí kolo

    • realizujeme klasickým atribútom onClick:

      <ImageView
          android:id="@+id/gallowsImageView"
          android:src="@drawable/gallows0"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:onClick="gallowsImageViewClick"
           />
      
    • čakáme, že v aktivite bude metóda:

      public void gallowsImageViewClick(View view)
      

Resources

  • obrázok so šibenicou potrebuje odkaz na obrázok
  • vložíme ho do res/drawable
    • adresár obsahuje viacero podadresárov, určené pre rozličné typy zariadení s rozličným rozlíšením či DPI
    • súbory v res/drawable sú štandardné
  • v obrázku využijeme android:src="@drawable/gallows0" ako odkaz na res/drawable/gallows0.png.

Toast

  • slúžia na stručné informačné oznámenia, ktoré používateľ zoberie na vedomie a nemusí ich odklikávať (flash notifications)

    Toast.makeText(this, "You must enter a letter.", Toast.LENGTH_SHORT)
    .show();
    
  • potrebujeme:
    • kontext: obvykle aktivita, z ktorej vyvolávame aktivitu
    • text, ktorý sa zobrazí
    • dĺžku zobrazenia: prevezmeme z konštanty

Farebné filtre

  • Nastavme farebný filter pre obrázok.
  • Zafarbime ho do zelena, ak je hra vyhratá:

    ColorFilter filter = new LightingColorFilter(Color.RED, Color.BLACK); 
    gallowsImageView.setColorFilter(filter);
    

Životný cyklus

  • aplikácia zatiaľ nereaguje na zmeny životného cyklu
  • ak otočíme displej, aktivita sa ukončí a spustí nanovo
  • očividný prejav: vygeneruje sa úplne nové slovo s odlišným počtom znakov
  • musíme prekrývať metódy životného cyklu a ukladať stav

Stav aktivity

  • čo je stavom aktivity?
    • obsah textového políčka s písmenom
    • aktuálny obrázok šibenice
    • obsah políčka s uhádnutými písmenami
  • stav aktivity je spätý so stavom hry Game
  • ak aktivita odchádza na pozadie, musíme stav inštancie aktivity uložiť
    • využime onSaveInstanceState() s parametrom typu Bundle
    • Bundle je mapa, do ktorej môžeme uložiť objekty, ktoré majú prežiť reštart aktivity
    • Bundle = zaváraninové poháre
    • nezabudneme zavolať rodičovskú implementáciu cez super.....
  • ak je aktivita zabitá a znovuvytvorená, v Bundle príde mapa s predchádzajúcimi uloženými hodnotami
    • musíme však overiť aj situáciu, keď je Bundle rovný null
  • bonusová vlastnosť: stav komponentov s android:id sa manažuje automaticky
  • toto všetko sa týka prechodného stavu: ak niekto reštartne telefón a podobne, musíme riešiť ukladanie perzistentného stavu
    • využijeme SQL databázu
    • alebo súbory
    • o tom nabudúce
  • späť k hre Game: ak hru vyhlásime za Serializable, vieme ju ľahko pchať do Bundle
    • toto je Java záležitosť
    • všetky inštančné premenné musia byť rekurzívne serializovateľné

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *