Image
9.7.2016 0 Comments

Seriál: Programujeme pre Android 21 / Viacdotykové ovládanie a ovládanie svetla

Zámysel prípravy článku o viacdotykovom ovládaní vznikol na základe hesla „škola hrou“ a to najmä preto, že sa v ňom budeme venovať jednoduchej, avšak veľmi užitočnej vlastnosti (feature) systému Android. Touto vlastnosťou, resp. metódou vstupu je viacdotykové (multi-touch) ovládanie, alebo tiež systém gést (gestures). V úvode si povieme pár viet o tejto zaujímavej metóde interakcie používateľa so systémom. Budeme pokračovať uvedením vzorky praktického príkladu implementácie uvedenej metódy. Nakoniec si ozrejmíme akým spôsobom možno prepojiť fyzické zariadenie s emulátorom. Práve to potrebujeme pre nahradenie absentujúcich funkcií emulátora.

Multi-Touch Gestures

Pod pojmom viacdotykové ovládanie rozumieme použitie viacerých ukazovateľov (pointers), ktoré v rovnakom čase vytvoria dotykové udalosti (touch events). V prípade dotykových obrazoviek smartfónov ide o súčasné dotknutie sa obrazovky na viacerých miestach. Je pritom jedno či použijeme prsty našej ruky, dotykové perá, alebo inú kombináciu ukazovateľov. Operačný systém rozoznáva, že používateľ sa dotýka obrazovky viacerými ukazovateľmi a po vykonaní analýz generuje príslušné typy udalostí. V prípade Androidu ide o nasledujúce elementárne udalosti:

ACTION_DOWN

prvý ukazovateľ sa dotkol obrazovky

ACTION_POINTER_DOWN

ďalší ukazovateľ sa dotkol obrazovky

ACTION_MOVE

zmena polohy ukazovateľa počas dotyku

ACTION_POINTER_UP

jeden z ukazovateľov ukončil dotyk

ACTION_UP

posledný ukazovateľ ukončil dotyk

 

Systém pre každý ukazovateľ uchováva jeho index – poradie prvku poľa, v ktorom sú uložené informácie o pohybových udalostiach (MotionEvents) vyvolaných príslušným ukazovateľom. Každý ukazovateľ je naviac identifikovaný pomocou jeho ID. ID je jedinečné, avšak index sa môže meniť v závislosti na poradí, v ktorom boli vyvolané príslušné pohybové udalosti.

Okrem jednoduchých dotykov, ktorými vykonávame základné výberové funkcie, nám Android ponúka skupinu špeciálnych gést akými je napr. posun a pustenie (drag and drop, scroll), zväčšovanie/zmenšovanie (scaling), dlhý dotyk (long press)...

Detekcia obvyklých gést

Systém autodetekcie obvyklých, resp. bežne používaných gést je založený na nasledujúcom mechanizme:

1. získavanie informácií o dotykových udalostiach:

Vždy keď sa používateľ dotkne obrazovky je systémom vykonaná callback metóda onTouchEvent() patriaca tomu View, ktorý konkrétny dotyk prijal.

2. interpretácia získaných údajov vo forme konkrétneho gesta:

Obvyklé gestá sú spracovávané v rámci triedy GestureDetector. Tá podporuje základné gestá akými sú onDown(), onScroll(), onLongPress(), onFling()… O interpretácii a výbere konkrétneho gesta systém informuje notifikáciou prostredníctvom callback rozhrania GestureDetector.OnGestureListener, resp. triedy SimpleOnGestureListener, ktorá implementuje všetky metódy on a ukončuje ich pomocou výrazu return false; To znamená, že štandardne nereaguje na žiadnu z udalostí a výber tak necháva na programátorovi. V špecifických prípadoch dokážeme tento stav docieliť aj v rámci triedy OnGestureListener a to tak, že do jej metódy onDown() takisto zahrnieme výraz return false;

Obr. 1 Ovládanie emulátora pomocou fyzického zariadenia s využitím aplikácie SDK Controller

Vzorka praktického príkladu

Praktická implementácia viacdotykového ovládania vykonávajúceho zmenu veľkosti (scale) imageView je nasledujúca:

1. definujeme metódu onScale() triedy SimpleOnScaleGestureListener, napr.:

private class scaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {

  @Override

  public boolean onScale(ScaleGestureDetector detector) {

    float scaleFactor = detector.getScaleFactor();

    matrix.postScale(scaleFactor, scaleFactor);

 

    imageView.setScaleType(ImageView.ScaleType.MATRIX);

    imageView.setImageMatrix(matrix);

 

    return true;

  }

}

2. vytvoríme inštanciu triedy ScaleGestureDetector s priradením nami implementovaného „načúvača“ (listener) – ide o objekt nami pripravenej triedy scaleListener:

scaleGestureDetector = new ScaleGestureDetector(getActivity(), new scaleListener());

3. definujeme metódu onTouch() konkrétneho imageView:

imageView.setOnTouchListener(new View.OnTouchListener() {

  @Override

  public boolean onTouch(View v, MotionEvent event) {

    scaleGestureDetector.onTouchEvent(event);

 

    return true;

  }

});

Prepojenie fyzického zariadenia s emulátorom

Pri práci v prostredí Android Studia dokážeme spúšťať nami vytvorené aplikácie s využitím AVD manažéra. Tento nástroj (emulátor) je určený na správu virtuálnych zariadení. Jednou z jeho mnohých výhod je možnosť otestovania aplikácií na rôznych emulovaných zariadeniach. Čo však v prípade ak chceme simulovať viacdotykové ovládanie v rámci emulátora?

Možností je niekoľko pričom veľmi elegantné a naviac lákavé a zaujímavé je prepojenie fyzického zariadenia s virtuálnym. Toto prepojenie realizujeme pomocou nasledujúcich krokov:

1. pripojíme fyzické zariadenie k PC pomocou USB a v zariadení povolíme Nastavenia -> Vývojárske možnosti -> Ladenie zariadenia USB (USB Debugging)

2. do zariadenia nainštalujeme aplikáciu SDK Controller:

Android/Sdk/platform-tools/adb install Android/Sdk/tools/apps/SdkController/bin/SdkControllerApp.apk

3. Na príkazový riadok v PC zadáme príkaz, ktorým povolíme odovzdávanie spojenia (forward socket connections):

Android/Sdk/platform-tools/adb forward tcp:1970 localabstract:android.sdk.controller

4. Na zariadení spustíme aplikáciu SDK Controller a stlačíme tlačidlo Control Multi-touch

5. Na príkazový riadok v PC zadáme príkaz, ktorým spustíme emulátor a jeho konkrétne virtuálne zariadenie (v našom prípade s názvom „Samsung“) s emuláciou multi-touch obrazovky:

Android/Sdk/tools/emulator-x86 -avd Samsung -screen multi-touch -gpu off

Pozn.: pre zrušenie odovzdávania spojenia zadáme na príkazový riadok v PC príkaz:

Android/Sdk/platform-tools/adb forward --remove-all

Zobrazit Galériu
Autor: Marek Sopko

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

ITPro

Právne okienko

08.12.2016 12:02

1. Ako postupovať, ak obchodník nechce uznať reklamáciu tovaru objednaného z e-shopu? V takomto prípade môžu nastať v zásade dve situácie. Ak zákazník reklamuje tovar do 12 mesiacov od jeho kúpy, mož ...

ITPro

Linux súkromne i pracovne v2.0 (14. časť): Small Business Server

09.11.2016 14:57

Pojem Small Business Server (malý firemný server) začala používať spoločnosť Microsoft ešte v roku 2000 na označenie servera, ktorý ­dokázal plniť úlohy niekoľkých samostatných serverov. Aplikačná vrs ...

ITPro

Industry 4.0: Fikcia alebo už realita?

09.11.2016 14:52

Štvrtá priemyselná revolúcia je pomenovanie rozsiahlych zmien prudko vstupujúcich do súčasného priemyslu. Nositeľom týchto zmien je digitalizácia výroby a optimalizácia všetkých podnikových procesov v ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá