Image
10.9.2016 1 Comments

Seriál: Programujeme pre Android / XML a animácie

V tomto článku sa budeme venovať dvom zdanlivo nesúvisiacim témam. Prvou bude práca s XML súbormi a druhou použitie animácií. Aj keď ide o dve samostatné témy, obe sa svojim spôsobom týkajú XML súborov. Ich praktickú implementáciu si neskôr ukážeme na kombinovanom vzorovom príklade.

Prehliadanie XML súborov

XML súbory sú textové – čitateľné (human-readable) súbory, ktoré sa stali štandardom pre výmenu konkretizovaného druhu informácií. Tie sú v XML súboroch štruktúrované pomocou tzv.  značiek (tags). Reťazce reprezentujúce značky nie sú ničím obmedzené a je iba na používateľovi, akú konkrétnu množinu reťazcov (ich hierarchiu) navrhne. Jednotlivé informačné bloky hierarchie sú uzavreté medzi tzv. štartovacími (START_TAG) a ukončovacími (END_TAG) značkami.

Android umožňuje prehliadať (parse) XML súbory a čítať údaje, ktoré obsahujú, pomocou rozhrania XmlPullParser a jeho dvoch implementácií:

1. kXML:

XmlPullParserFactory my_kXML = XmlPullParserFactory.newInstance();
XmlPullParser kXML_parser = my_kXML.newPullParser();

2. eXpat:

XmlPullParser eXpat_parser = Xml.newPullParser();
Prehliadanie XML súborov realizujeme pomocou jednoduchého algoritmu:

1. špecifikujeme, ktoré informácie chceme načítať, tzn. o ktoré značky máme záujem,

2. inicializujeme parser bez/s použitím XML namespaces (xmlns) s uvedením súboru (streamu), ktorý má spracovávať:

factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true/false);
my_parser = factory.newPullParser();
my_parser.setInput(InputStream, null);

3. spustíme proces čítania značiek: getEventType() vráti typ aktuálnej značky (START_TAG, TEXT, END_TAG, END_DOCUMENT), getName() vráti názov značky, getText() vráti reťazec – textový obsah značky, next() načíta ďalší typ značky v poradí:

int eventType = my_parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
  String tagname = my_parser.getName();
  switch (eventType) {
    case XmlPullParser.START_TAG:
      if (tagname.equalsIgnoreCase("značka1")) { ... }
      break;
    case XmlPullParser.TEXT:
      text = my_parser.getText(); break;
    case XmlPullParser.END_TAG:
      if (tagname.equalsIgnoreCase("značka1")) { ... }
      break;
    default: break;
  }
  eventType = my_parser.next();
}

Animácie

Android API síce implicitne podporuje iba niekoľko základných spôsobov tvorby animácií, no programátor dokáže explicitne naprogramovať prakticky čokoľvek nehovoriac o tom, že stále má možnosť využiť funkcie iných grafických rozhraní akým je napr. OpenGL.

Zabudované animácie sú založené na jednoduchom princípe: interpolátor vypočítava zo štartovacích (startValue) a koncových (endValue) hodnôt tzv. medzihodnoty (interpolatedValue). Výpočty pritom rieši na základe stanovených kritérií v stanovenom čase.

Android API ponúka dva základné typy animácií:

1. animácie vlastností (property animation) – robustný systém, pomocou ktorého môžeme animovať prakticky akúkoľvek vlastnosť objektu nezávisle na tom či je, resp. nie je zobrazený na obrazovke zariadenia,

2. animácie zobrazení (view animation) – animácie grafických prvkov zobrazovaných na obrazovke zariadenia, ich implementácia je jednoduchšia, avšak problémom je, že modifikujú vlastnosti objektov až v okamihu ich vykreslenia na obrazovke takže napr. pohybujúce sa tlačidlo nebude správne reagovať na prípadné kliknutie; tento typ animácií ďalej rozdeľujeme na tzv. tween animácie (transformujú jeden obraz s využitím triedy Animation) a frame animácie (vytvárajú sekvencie obrazov s využitím AnimationDrawable).

Animácie majú nasledujúce všeobecné charakteristiky:

Duration

Trvanie animácie

Interpolation

Interpolačná funkcia určená na výpočet nasledujúcich hodnôt z predchádzajúcich hodnôt

Repeat count and behavior

Opakovanie animácie po jej ukončení: prehrávanie od začiatku do konca / od konca k začiatku (reverse) / počet opakovaní

Animator sets

Zoskupovanie animácií

Frame refresh delay

Interval obnovy snímok

Komponenty animácií vlastností

Základnou triedou pre prácu s animáciami vlastností je trieda Animator, ktorá sama o sebe neposkytuje mnoho metód, no tvorí základ pre nasledujúce subtriedy:

ValueAnimator

(TimeInterpolator, TypeEvaluator)

Spravuje časovanie a uchováva aktuálne hodnoty vlastností závislé na uplynutom čase

ObjectAnimator,

(View.ViewPropertyAnimator)

Spravuje objekty a vlastnosti objektov, ktoré majú byť animované

AnimatorSet

Spravuje skupiny animácií a ich vzájomné vzťahy

AnimatorListener

Sledovače udalostí – štart, koniec, opakovanie, zrušenie animácie

V prípade animácie zobrazení pracujeme s metódami triedy view.animation, konkrétne napr. s metódami: start(), setDuration(), reset(), cancel(). V animačnom systéme majú významnú rolu ďalšie komponenty akými sú napr. interpolátory, alebo objekty kľúčových snímok (keyframe), ktorým sa však nebudeme detailne venovať.

Definícia animácií pomocou XML

Animačný systém Androidu používa na definíciu animácií a interpolátorov XML súbory uložené v zložke res/animator. V súboroch určených na animáciu vlastností rozlišuje značky pre ValueAnimator, pre ObjectAnimator a pre AnimatorSet. V súvislosti s animáciami zobrazení rozlišuje značky , , , , pre tween animácie a , pre frame animácie.

Na načítanie obsahu XML súboru a aplikáciu transformácií na zvolený objekt používame v prípade tween animácií sekvenciu:

ImageView moj_obrazok = (ImageView) findViewById(R.id.my_image);
Animation moja_animacia = AnimationUtils.loadAnimation(this, R.anim.xml_mojej_animacie);
moj_obrazok.startAnimation(moja_animacia);

V prípade frame animácií sekvenciu:

ImageView moj_obrazok = (ImageView) findViewById(R.id.my_image);
moj_obrazok.setBackgroundResource(R.drawable.my_img);
moja_animacia = (AnimationDrawable) moj_obrazok.getBackground();
moja_animacia.start();

Priame subtriedy abstraktnej triedy Animation

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

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 ...

ITPro

Vývoj aplikácií UWP pre Xbox One II.

09.11.2016 14:47

V predošlej časti sme ukázali postup, ako si ­vytvoriť vývojársky účet a aktivovať vývojársky režim na hernej konzole Xbox One, aby ste mohli testovať svoje aplikácie. Výhodou hernej konzoly Xbox je v ...

1 Comments

  1. programujem uz 4 roky android reakcia na: Seriál: Programujeme pre Android / XML a animácie
    11.9.2016 01:09
    to neviem z od s kade je totok okopirovane to su totalne bludy hlavne xml z tohoto tutorialu sa nikto nikdy nic nenauci
    Reagovať

Vyhľadávanie

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

Najnovšie videá