Hirdetés

Alkalmazásfejlesztés badára: Érintések figyelése

Az összes eddig megjelent, badát futtató modell éirntőképernyővel van szerelve, és nem is tűnik úgy, mintha ennek vége szakadna. Az alkalmazásokban használt, előre definiált vezérlők egytől egyig képesek lekezelni az érintéseket, de mit kell tennünk, ha egy saját objektumot szeretnénk felvértezni a tapizásra reagálás képességével, esetleg egy meglévő elemhez adnánk valami új érintéskezelési algoritmust?

Természetesen ezek megvalósíthatóak bada alatt (mint ahogyan a többi okostelefon-platformban is), ráadásul viszonylag könnyen. A dologról tudni kell, hogy ez az osztály hétféle tapogatástípust képes kezelni, és csak single-touch módban működik, azaz egyszerre csak egy ujjunkra tud figyelni. A multitouch, azaz a többujjas kezelés más tészta, arra is kitérünk a közeljövőben, most viszont a klasszikus, egyszeri érintést vizsgáljuk.

Kód szinten szerencsére annyira nem bonyolult a dolog. Mivel egy eseményfigyelőt szeretnénk készíteni, implementálnunk kell a megfelelő interfészt, ez jelen esetben az érintések kezelésére szolgáló Osp::Ui::ITouchEventListener. Ehhez meg kell valósítanunk hét függvényt, amelyek hét különböző érintési típust jelképeznek:

  • OnTouchPressed() - egyszeri érintést detektál
  • OnTouchLongPressed() - hosszan tartó nyomásra érzékeny
  • OnTouchReleased() - a képernyő elengedését detektálja
  • OnTouchMoved() - az ujjunk mozgására triggerel
  • OnTouchDoublePressed() - a dupla érintésre figyel
  • OnTouchFocusIn() és OnTouchFocusOut() - az érintési fókuszra figyel

Tehát ki kell választani, hogy nekünk melyik érintéstípus(ok) érzékelésére van szükségünk, majd a megfleő függvény törzsét kitölteni a kívánt kódrészlettel. Mind a hét függvénynek három bemenő paramétere van: egy Source, ami Osp::Ui:Control típusú, és a forrást jelképezi; használat előtt természetesen castolnunk kell. A második bemenő a currentPosition (Osp::Graphics::Point), amely az érintési pozíciót adja meg, a képernyő felbontása szerinti pontokkal. A harmadik paraméter pedig egy Osp::Ui::TouchEventInfo példány, amelytől a detektált érintésre vonatköző információkat kérhetünk el, mint a kezdő- és az aktuális pozíció, érintés típusa, esemény ID-je stb.

Miután leimplementáltuk a tapogatást kezelő osztályunkat, már csak hozzá kell adnunk a kívánt vezérlőhöz, amit az AddTouchEventListener() függvénnyel tehetünk meg, és már készen is vagyunk a dologgal.

A példakód természetesen ismét elérhető a Mobilarénás SVN-ből, a rovatunk keretein belül fejlesztett térkép-alkalmazásba építettem bele a funkciót: a térkép egy pontját hosszan lenyomva az adott pontra fókuszál az alkalmazás.

dr. Kind

Azóta történt

Előzmények