Példaprogramok Android alá (Lista, mentés, visszatöltés, pattogó android figura)
Android alapok Android játékfejlesztés
Godinek László
Tartalomjegyzék 1
Mentés......................................................................................................................................................... 1 1.1
A fájlmentésről röviden ....................................................................................................................... 1
1.2
Fájl mentése a belső tárolóra .............................................................................................................. 1
2
Visszatöltés .................................................................................................................................................. 4
3
Lista.............................................................................................................................................................. 6 3.1
4
Alapműveletek a listán ........................................................................................................................ 6
Pattogó android figura ................................................................................................................................ 9 4.1
A program rövid leírása ....................................................................................................................... 9
4.2
Programkód bemutatása ..................................................................................................................... 9
1 Mentés 1.1 A fájlmentésről röviden A legtöbb androidos programnál létfontosságú az adatok mentése. Gondoljunk csak arra, hogyha valamit módosítunk a beállításon, akkor a programnak ezt meg kell jegyeznie, hogy a következő induláskor ne az alapbeállítással startoljon, hanem ezzel a megváltoztatott paraméterrel. Ezenkívül számtalan példát lehetne hozni, de lássuk, hogy miként működik a fájlok mentése android operációs rendszeren. Minden androidot használó eszköznek létezik ’belső’ és ’külső’ tárolója. A belső tárolót a gyártók beleépítik az eszközbe, és ezt nem lehet eltávolítani. Ezzel szemben a külső tároló lehet egy SD kártya, mely kivehető az eszközből. Viszont vannak olyan készülékek, melyek csak egy beépített tárolóval rendelkeznek, és nincs lehetőség a bővítésre. Ezeknél szintén megtalálható a ’belső’ és ’külső’ tároló, itt a beépített tárolót két partícióra osztják. Belső tároló tulajdonságai:
mindig rendelkezésre áll, az ide mentett fájlokat alapbeállítás szerint csak az a program érheti el, amelyik elmentette azt, a program eltávolításánál a rendszer az összes ehhez tartozó fájlt letörli a belső tárolóról.
Külső tároló tulajdonságai:
nem áll mindig rendelkezésre, mivel a felhasználó a külső tárolót USB-ként is működtetheti, és ebben az esetben az eszköz nem használhatja, a külső tárolóra mentett fájlokhoz bárki hozzáférhet, a program eltávolításánál nem minden esetben törlődnek a hozzá tartozó fájlok.
A következőkben a belső tárolóra való fájlmentés lesz bemutatva.
1.2 Fájl mentése a belső tárolóra Az alábbi kódrészlet segítségével menthető egy string. 1. String filename = "myfile"; 2. String string = "Hello world!"; 3. FileOutputStream outputStream; 4. 5. try { 6. outputStream = openFileOutput(filename, MODE_PRIVATE); 7. ObjectOutputStream out = new ObjectOutputStream(outputStream); 8. out.writeObject(string); 9. out.flush(); 10. out.close(); 11. } 12. catch (Exception e) { 13. e.printStackTrace(); 14. }
1-> fájlnév megadása, 2-> string, amit a fájlba szeretnénk írni, 3-> csatorna létrehozása íráshoz, 6-> fájl megnyitása a megadott paraméterekkel,
1
7-> csatorna létrehozása íráshoz, mely segítségével objektumokat, és alap típusokat írhatunk (int, char, stb..), 8-> string kiirása, 10-> a megnyitott csatorna lezárása. Hozzunk létre egy új android projektet, majd másoljuk be a kódrészletet. Két helyen hibát fog jelezni, itt csak annyi a dolgunk, hogy a hiányzó részletet importáljuk, kattintsunk a sor elejére, majd import.
1. ábra Mentés
Futtatás után a következőképpen tudjuk ellenőrizni, hogy a program elmentette-e a fájlt: A File Explorer alatt lépjünk be a data/data mappába, majd keressük meg a projekt nevét, nyissuk le a files mappáját, és ha sikeres volt a mentés, akkor ott megtalálható a fájl. Megnyitni viszont csak akkor tudjuk, ha átmásoljuk a számítógépre.
2. ábra DDMS megnyitása
2
3. ábra Mentett fájl megtekintése
Kattintsunk a jobb felső ikonra, majd válasszuk ki, hogy hova mentse a fájlt. Megnyitás után ellenőrizhető a tartalma.
3
2 Visszatöltés Egészítsük ki a programot a következő kódrészlettel: 1. FileInputStream inputStream; 2. try { 3. inputStream = openFileInput(filename); 4. ObjectInputStream in = new ObjectInputStream(inputStream); 5. String tmp = ""; 6. tmp = (String)in.readObject(); 7. in.close(); 8. textView1.setText(tmp); 9. } 10. catch (Exception e) { 11. e.printStackTrace(); 12. }
1-> csatorna létrehozása olvasáshoz, 3-> fájl megnyitása olvasásra, 4-> csatorna létrehozása olvasáshoz, mely segítségével objektumokat, és alap típusokat olvashatunk (int, char, stb..), 5-> tmp tároló string létrehozása 6-> fájl tartalmának belemásolása a tmp stringbe 7-> fájl lezárása 8-> tmp string tartalmának megjelenítése egy textviewben Ahhoz, hogy a beolvasás látható legyen, definiálni kell egy textviewt, melybe belemásoljuk a már kiolvasott fájl tartalmát a stringből. Ezt tartalmazza a 8. sor. A teljes kódrészletet ehhez még plusz két sorral kell kiegészíteni, melyek a következők: Textview textView1; textView1 = (TextView)findViewById(R.id.textView1);
4
Beszúrás után:
4. ábra Visszatöltés
5
3 Lista A listában az elemek sorban helyezkednek el, így minden egyes elemre egy indexel lehet hivatkozni. Az első elem a lista 0. helyén található. Listát a következő parancs segítségével tudunk létrehozni: ArrayList<String> listaneve = new ArrayList<String>();
3.1 Alapműveletek a listán 1. 2. 3. 4. 5. 6. 7. 8. 9.
elem hozzáadása a lista végéhez elem hozzáadása a lista egy meghatározott helyére elem törlése az összes elem törlése a listáról lista másolása keresés a listában adott helyen levő elem lekérése adott helyen levő elem lecserélése a listában található elemek számának lekérése
1. Elem hozzáadása a lista végéhez listaneve.add("valami");
2. Elem hozzáadása a lista egy meghatározott helyére (az az elem, amelyiknek a helyére beszúrjuk, eggyel jobbra csúszik, és a mögötte levők szintén) listaneve.add(3,"valami");
3. Elem törlése meghatározott indexről listaneve.remove(3);
4. Összes elem törlése a listáról listaneve.clear();
5. Lista másolása listaneve.clone();
6. Keresés a listában listaneve.contains("valami");
6
7. Adott helyen levő elem lekérése listaneve.get(3);
8. Adott helyen levő elem lecserélése listaneve.set(4,"valami");
9. A listán található elemek számának lekérése listaneve.size();
A listát a következő parancsok segítségével tudjuk kiírattatni egy textviewba: for (int j = 0; j < listaneve.size(); j++) textView1.append(listaneve.get(j) + ", ");
Konkrét példán az összes művelet:
7
5. ábra Műveletek listán, forráskódos
8
4 Pattogó android figura 4.1 A program rövid leírása A program kirajzol egy android figurát, és ha a képernyőn érintést érzékel, akkor elindítja azt abba az irányba. Minél távolabbi az érintés a bábutól, annál gyorsabban, és annál tovább fog mozogni. Egy idő után elkezd lassulni, majd teljesen megáll. Meg van határozva a képernyő szélessége és hosszúsága, így ha eléri a szélét, akkor onnan visszapattanva folytatja útját.
4.2 Programkód bemutatása A program három java filet tartalmaz:
GyorsulasosMozgatas.java,
GrafikaKirajzolasa.java, MainThread.java.
GyorsulasosMozgatas.java A program az ebben a fájlban levő utasításokat hajtja végre elsődlegesen. Az alábbi parancs segítségével pedig áttér a következőre, vagyis a GrafikaKirajzolasa fájlra: setContentView(new GrafikaKirajzolasa(this));
GrafikaKirajzolasa.java Változók, példányok:
thread: ez maga a szál, ami biztosítja, hogy a program folyamatosan fusson, számoljon és rajzolja ki az android figurát, MozgatandoFigura: az android figura, mely a képernyőn látható, maxY, maxY: a képernyőnk szélessége és hosszúsága, ezek között mozog a figura, xpoz,ypoz: a figura kezdőpozíciója, erox,eroy: meghatározzák, hogy mekkora erővel induljon el a figura, lassulas: hogyan lassuljon a figura.
Függvények:
GrafikaKirajzolasa: konstruktor, SurfaceChanged: ez a függvény akkor hívódik meg, amikor a képernyő felülete megváltozik, például elfordítjuk a készüléket, ezáltal megváltozik a szélessége és hosszúsága, SurfaceCreated: elindítja a szálat, SurfaceDestroyed: szál leállítása, onTouchEvent: ennek a függvénynek a segítségével kapjuk meg a képernyőn lenyomott pozíció koordinátáit, illetve meghatározza azt is, hogy milyen sebességgel induljon el a figura, onDraw: a figura folyamatos kirajzolása a képernyőre, mozgat: ez a függvény határozza meg, hogy a figurának hol legyen a következő megjelenése a képernyőn.
9
MainThread.java Függvények:
setRunning: ez egy bool változót állít igaz vagy hamis értékre (szál futása, leállítása), MainThread: konstruktor, run: ez maga a szál, addig fut, amíg a running változó értéke igaz, minden egyes ciklusában meghívja a mozgat, és az onDraw függvényt.
10