Hirdetés

Alkalmazásfejlesztés badára: Tovább térképezünk

A mai bejegyzés során továbbra is a térképes alkalmazásunkat hegesztgetjük, amelybe ezúttal egy felugró ablakot kódolunk. Aki használt már például Google Maps-et, biztosan tudja, miről van szó: a térkép adott pontját hosszan lenyomva tartva felugrik egy ablakocska, amely információkat tartalmaz az adott helyről; ilyesmit fogunk mi is csinálni a poszt folyamán.

Szerencsére nem túl bonyolult ezt megoldani, a bada tartalmaz erre egy beépített osztályt, ez az Osp::Locations::Controls::NativeMapInfoWindow. A dolog működése hasonló az előző bejegyzésben elkészített marker objektum működéséhez, itt is kvázi egy overlay réteget pakolunk a térkép fölé, csak jelen esetben ez egy kis felugró ablakocska lesz. A választék egyébként egészen széles, használhatunk például kört, téglalapot és sokszöget is overlay-ként.

Egyelőre viszont maradjunk az ablaknál. A használata kód szinten a következőképpen néz ki: először egy kétfázisú konstruktorral fel kell vennünk egy példányt, az ablak elhelyezkedését és egyéb tulajdonságait a Construct() függvényben adhatjuk meg. Az első bemenő paraméter a WindowStyle, amely azt határozza meg, hogy az ablak melyik sarkában legyen a kis nyilacska. Ez után adhatjuk meg a szélességet és a magasságot, majd pedig a pozíciót kell bevinnünk. Utóbbit koordinátákkal kell megadnunk, de nem kell félni, a Map osztály biztosít egy függvényt, amely a képernyő egy pixelek alapján megadott pontját térképkoordinátákra képzi le, ez a TransformPixelsToCoordinates. Mivel azt szeretnénk, hogy középen legyen az ablak, a Wave 800 x 480-as felbontása miatt a (400,240) pontot kell megetetnünk a metódussal, és készen is vagyunk. Visszatérve a NativeMapInfoWindow Construct() függvényére, még egy bemenő paraméterrel adósok vagyunk, ez pedig az offset, azaz az eltolás. Ez határozza meg, hogy az előzőleg megadott ponthoz képest hol legyen az ablakunk; igazán nem sok értelme van, érdemes (0,0)-ra állítani.

Ez után meg kell adnunk az ablak címét (SetTitle) és a tartalmát (SetContent). Utóbbinál a szöveg mellett a betűméretet és a betűszínt jelképező mezőket is ki kell töltenünk, sőt, ha gondoljuk, egy képet is feltölthetünk ide. Ezek mellett érdemes engedélyezni a bezáró gombot, ami egy kis x-ként manifesztálódik a jobb felső sarokban, ezt egy true-val megetetett SetCloseButtonEnabled() függvény hívásával tehetjük meg. Utolsó lépésként pedig hozzá kell adnunk egy WindowEventListener példányt a térkép osztályunkhoz az AddMapInfoWindowEventListener függvény segítségével. Ez egy olyan osztály, amely megvalósítja az IMapInfoWindowEventListener interfészt, érdemes erre egy belső osztályt írni. Ezzel készen is vagyunk az inicializáló lépésekkel.

Már csak a megfelelő helyen és időben kell használnunk az ablakot, amelyet az OpenInfoWindow() függvénnyel tudunk megjeleníteni. A példaprogramban az egyszerűség kedvéért mindig abban a pontban jelenik meg, ahova a GPS által küldött koordináták mutatnak, de persze bárhova át lehet pakolni. A kód természetesen ismét elérhető az SVN-ből.

dr. Kind

Előzmények