Prin Android se intelege ata o platforma software cat si un sistem de operare [616022]

1 Android
Prin Android se intelege ata o platforma software cat si un sistem de operare
destinat in mod special dispozitivelor mobile, cu toate acestea sistemul de operare
poate fi folosit si pe alte dispozitive cum ar fi televizoarele. Dezvoltarea a fost
realizata cu ajutorul firmei Google iar ulterior a fost preluat de OHA (Open Handset
Alliance), o alianta comerciala formata di 48 de companii, printre care se enumera si
Google, ce au ca activitate dezvoltarea de hardware, software si telecomunicatii.
Scopul formari acestei aliante fiind acela de a dezvolta standarde pentru
dispozitivele mobile ce au la baza nucleul Linux.

Android este marca inregistrata, cu toate acestea datorita suitei software de
tipul open source, oricine se poate bucura gratuit de acces integral la codul sursa cu
ajutorul unui limbaj de programare. Ca limbaj de programare poate fi folosita o gama
larga de limbaje, cu toate acestea Google ofera sprijin in mod oficial unui singur
limbaj si anuma Java, restul limbajelor ne fiind recomandate.

Pentru instalarea unei aplicatii pe orice dispozitiv ce ruleaza un sistem
android este suficienta compilarea codului sursa, impreuna cu toate resursele
necesare pentru buna functionare a aplicatiei, in arhive de tipul .apk. Aceste arhive
v-or fi tratate ca aplicatii unitare de catre sistemul android.

Accesul liber la codul sursa si licenta gratuita a facilitat intr-un mod incredibil
dezvoltarea aplicatiilor pe sistemul android. Existand in momentul de fata peste 190
de milioane de telefoane mobile ce foloseste acest sistem de operare iar numarul lor
se extinde cu 1 milion de noi utilizatori in fiecare zi.

1.1 Scurt istoric

Totul a inceput in iulie 2005 cand Google a achizitionat o mica companie de
tip startup din Palo Alto, California, SUA cu denumirea Android Inc. Lipsa cunoasteri
despre activitatile sustinute de Android Inc, se stia doar ca faceau software pentru
telefoane mobile, a creat zvonuri puternice cum ca google ar fi interesat sa intre pe
piata telefoniei mobile, desi nimeni nu stia ce rol ar putea indepline pe aceasta piata.
Intre timp Google lucra la un proiect condus de Rubin ce avea ca scop dezvoltarea
unui sitem de operare flexibil, upgradabil pentru dispozitivele mobile ce se baza pe
Linux. Momentul in care Google a prezentat produsul sau mai multor operatorilor de
retele de telefonie mobila si producatori de telefonie mobila, in anul 2006 a creat noi
zvonuri cum ca Google vor sa creeze propiul dispozitiv mobil si chiar ca exista 30 de
telefoane prototip deja pe piata.
In 5 noiembrie 2007 Google a format o alianta numita OHA (Open Handset
Alliance) formata din urmatori membri: Google, Intel, Motorola, HTC, T-Mobile,

Nvidia, Qualcomm si Sprint Nextel, cu scopul de a crea standarde deschise pentru
dispozitivele mobile. O data cu anuntul public al forari OHA a fost prezentat si primul
produs, numit Android, ce era o platforma pentru dispozitivele mobile ce avea la
baza nucleul linux. In data de 9 decembrie 2008, s-au alaturat proiectului Android 14
membri noi, printre care se numara: Sony Ericsson, Toshiba Corp, Vodafone si alti.
In 21 octombrie 2008, Google a facut disponibil proiectul android ca Open
Souce sub licenta Apache. Cu toate acestea au aparut o gramada de critici la adresa
Android care acuzau firma Google ca nu au pus tot codul ca Open Source si ca
unele parti ale SDK-ului au ramas ca sursa inchisa si sub proprietatea Google. De
altfel se crede ca acest lucru ca Google sa poata controla platforma.

1.2 Structura de baza android

Structura sa este una simpla bazata pe patru nivele baza fiind nucleul Linux.
Aceasta structura este prezenata in ​ figura 1.1

Figura 1.1
Prezentarea celor patru nivele ale sistemului de operare Android:
1. Nivelul aplicatiei:

○ La acest nivel se gasesc toate aplicatiile software ce vin odata
cu sistemul de operare cum ar fi:managerul de contacte, clientul
de email, browserul web si multe alte aplicati similare.
○ Tot la acest nivel se gasesc si aplicatiile instalate ulterior de pe
Magazin Play sau alte surse. Aplicati ce in mare parte sunt
scrise in Java dar si unele ce sunt scrise intr-un alt limbaj de
programare.
2. Nivelul framework-ului:
○ Acest nivel este un cadru folosti la dezvoltarea diverselor
aplicatii, oferindule o baza solida de pe care sa inceapa
dezvoltarea/
○ Tot el contine o multitudine de clase si sisteme generale pentru
a face dezvoltarea aplicatiilor mult mai usoara. Majoritatea
sistemelor si claselor prezente in acest nivel sunt necesare
pentru dezvoltarea aprope oricarei apicatii.
○ Exemple de clase si sisteme ar fi: managerul de ferestre,
sistemul de view-uri, managerul de resurse, managerul de
notificari si multe altele.
3. Nivelul librariilor software:
○ Acest nivel detine la comun toate librariile necesare la buna
functionare a aplicatiilor software. Exemple de librarii ar putea fi
librarii: audio, video, 3D, 2D, webKit, SSL si multe altele.
○ Tot acest nivel mai detine si modulul ​ “Android Runtime” ​ ce
permite rularea aplicatiilor Java in masini virtuale independente.
○ Toate aplicatiile inainte de a fi rulate in masini virtuale sunt
compilate de ​ DVM (Dalvik Virtual Machine) ​ in formatul ​ .dex
(Dalvik Executable) ​ la momentul executiei aplicatiiei. Acest
lucru permite o mobilitate uimitoare a aplicatiilor Java, ne mai
fiind nevoie creerea unei noi aplicatii pentru fiecare platforma ci
fiecare aplicatie are capacitatea de a se adapta fiecarui sistem
ce detine DVM.
4. Nivelul Linux Kernel:
○ Acest nivel este insusi nivelul sistemului de operare linux, ce
este scris aproape in totalitate in limbajul de programare C.
○ Acest nivel face legatura intre software si hardware prin
intermediul diferitelor drivere si managere cum ar fi: driverul
audio, driverul pentru camera, driverul WiFi si multe altele.

1.3 Android Studio

Android Studio este un IDE dezvoltat de Google cu scopul de a facilita
dezvoltarea de software pentru dispozitive cu sisteme de operare android. In data de
16 Mai 2013 a fost primul anunt public la o conferinta tinuta de Google iar prima
versiune stabila a fost anuntata abea in luna Decembrie a anului 2014. Pentru
folosirea programului Android Studio este necesara atat instalarea sa cat si
instalarea programului Java SDK. Iar pentru rularea aplicatiei avem optiunea atat a
ne conecta propriul telefon prin intermediul unui cablu USB cat si creerea unui
telefon virtual cu ajutorul instrumentelor puse la dispozitie de Android Studio.

Exista o gama larga de soft-uri ce pot fi folosite la dezvoltarea aplicatiilor
android, dintre care cele mai des folosite sunt: Visual Studio si Eclipse. Avantajul
acestui software consta in modul in care a fost conceput special pentru sistemele
android si numeroaselor facilitati oferite pentru dezvoltarea aplicatiilor android.
Printre aceste facilitati se enumera:
● Generarea a mai multor fisiere APK
● Rularea codului instant
● Editarea codului intr-un mod inteligent
● Rularea rapida a diferitelor tipuri de emulatoare
● Sistem de construc ț ie robust ș i flexibil
● Dezvolta ț i pentru toate dispozitivele Android
● Integrare cu GitHub

Pentru dezvoltarea unei aplicati care sa poata fi comercializata, in ciuda
faptului ca Android Studio ofera de la sine o gama larga de unelte ajutatoare si de
toate instrumentele necesare pentru comercializare, mai este nevoie de foarte multa
creativitateprecum si te stapanirea unui limbaj de programare, de recomandat java,
ce este orientat pe obiect. De altfel mai este nevoie si de parcurgerea unor etape
relativ simple:
I. Stabilirea principalelor atribute si functionalitati ale aplicatiei
II. Stabilirea unui design simplu si util. De recomandat ar fi sa se foloseasca un
editor grafic, de exemplu: Sketch pentru pentru mac sau PhotoShop pentru
windows, se poate folosi orice editor. Si sa se respecte limbajul de design,
Material Design, creat de firma Google
III. Dezvoltarea aplicatiei
IV. Scrierea testelor ui test si unit test

1.3.1 Interfata

Android Studio are o interfata foarte complexa si destul de greoaie pentu un
incepator, insa o data ce te obisnuiesti cu ea vei observa ca este foarte utila
oferintuti acces usor si rapid aproape la orice unealta vei avea nevoie. Desi lasa loc

si de cateva inbunatatiri majore. Dar tinand cont ca aplicatia s-a dezvoltat in timp
rezolvand pe parcurs tot felul de nevoi iar corectiile ulterioare fiind destul de greoaie
de realizat din cauza numarului mare de utilizatori ce deja s-au obisnuit cu aceasta
interfata, putem spune ca s-a dezvoltat destul de rezonabil.

Fig 1.1 Interfata Android Studio

Interfata include mai multe elemente cum ar fi:
● Structura proiectului – Se regaseste in partea stanga a ferestrei si contine
toate fisierele cuprinse in proiect. Cu ajutorul butonului de deasupra sectiuni
se poate interschimba modul de structurare. Cel mai uzual mod fiind cel
standard si anume monul Android. Modul Android structureaza fisierele pe
module iar la final se afla Grandle Scripts. Fiecare modul la randul lui este
impartit in trei sectiuni:
○ Manifests care tine fisierele cu caracter sensibil cum ar fi: activitatile
folosite si setarile lor, permisiunile necesare aplicatiei si multe altele
○ Java care tine toata partea de cod sursa structurat in doua foldere.
Unul tine functionalitatea modulului iar celalat fisierele de teste pentru
acel modul.
○ Res acest fisier inglobeaza toate resursele folosite de modulul
respectiv. Structurat la randul sau in mai multe foldere:
ș Drawable contine toate imaginile de orice fel, inclusif cele
generate prin cod specific, in mai multe dimensiuni.
ș Layout contine toate view-urile modulului in fisiere de tip .xml
ș Menu contine meniurile folosite de modul
ș Values contine toate valorile folosite in modul sub un singur
exemplar astfel incat cand vei dori sa schimbi unele valori sa le
poti face rapid si usor. Acest flder la randul lui este structurat in

mai multe fisiere, printre care se enumera: dimensions, strings,
styles si multe altele.
● Terminalul – terminalul se afla in partea de jos a aplicatiei si ne ofera acces
rapid la sistemul de operare pe care ruleaza Android Studio. Terminalul este
echivalentul cmd-ului pe windows sau a terminalului pe sistemul OSX si
Linux.
● Android Monitor – acest tab se afla langa cel de terminal si contine logarea
tuturor activitatilor ce au loc la rularea aplicatiei. Odata deschis tabul se poate
selecta din partea superioara a tabului atat dispozitivul de pe care sa se
colecteze logurile cat si procesul.
● Run si debug mode – aceste doua butoane se afla in bara superioara a
aplicatiei. Ambele butoane fac in principiu acelas lucru, rularea modulului
selectat in butonul alaturat, diferenta consta in faptul ca butonul de debug
mode ataseaza si functia de debug. Functia de debug poate fi si adaugata
ulterior, dupa rularea aplicatiei cu ajutorul butonului de run, cu ajutorul
butonului attach debug alaturat.
● Virtual Device Manager – se afla de asemenea in bara superioara. Cu ajutorul
acestui buton putem deschide managerul de device-uri, unde putem modifica
device-urile dupa bunul plac.
● Butonul de search – se afla in coltul aplicatiei dreapta-sus si are simbolul unei
lupe. Cu ajutorul acestui buton se poate cauta foarte usor orice functie, fisier,
setare sau orice altceva.
● Sectiunea view-urilor din GUI – se afla in partea dreapta-sus a aplicatiei si
prezinta toate elementele de GUI prezente in view-ul selectat sub forma de
arbore. Aicea trebuie avut grija sa nu se creeze un arbore cu o adancime prea
mare in mod inutil. Cu cat creste adancimea arborelui cu atat scade
performanta aplicatiei.
● Sectiunea de proprietati ale view-ului – se afla in partea dreapta-jos chiar sub
sectiunea de view-uri si prezinta lista de proprietati ale elementului selectat in
lista de mai sus. Tot aicea se pot face modificari ale proprietatilor intr-un mod
simplu si rapid.

1.3.2 Activity

O activitate este un singur lucru concret pe care utilizatorul il poate face la un
moment dat. Aproape toate activitatile au posibilitatea de a interactiona cu
utilizatorul, asa ca ele sunt cele mai potivite pentru a avea grija de fereastra atribuita
cu ajutorul lui setContentView(). Asadar ori ce aplicatie are nevoie de cel putin o
activitate pentru a functiona. Tot in cadrul unei activitati poate fi specificate una sau
mai multe actiuni ale butoanelor din view. Legaturile intre activitate si buton poate fi

facuta fie prin java in interiorul activitati fie prin .xml la creerea butonului dupa cum
se poate observa in exemplul 1.1

Exemplul 1.1

In acest exemplu pentru a face legatura dintre metoda send_Message cu butonul ne
folosim de parametrul onClick din libraria android.

Un alt criteriu foarte important este ciclul de viata al activitati ( ​ Lifecycle ​ ). Ciclul
de viata ne ajuta foarte mult in a stabili ce sa se intample in functie de actiunile
utilizatorului. Toate activitatile sunt tratate automat de sistem sub forma de stack de
activitati. Atunci cand este creata o noua activitate ea este plasata in fata celei de
dinainte si ca ramanea in aceasta pozitie pana la inchiderea sa sau deschiderea
unei noi activitati.

In esenta o activitate poate avea patru stari:
1. Atata timp cat o activitate se afla in prim plan, in partea de sus a stivei, putem
spune ca este activa sau ca ruleaza.
2. In situatia in care o activitate isi pierde focalizarea dar ramane vizibila, din
ceva motiv s-a deschis o alta activitate deasupra iei, activitate ce nu este pe
tot ecranul, sau s-a deschis o activitate transparenta desupra iei, atunci intra
in starea de pauza. O activitate in starea de pauza este functionala,
pastrandu-si toate informatiile si ramane atasat de managerul de ferestre,
totus ea poate fi inchisa de sistem in cazul in care sistemul ramane cu prea
putina memorie.
3. Cand o activitate este ascunsa total de o alta activitate ea intra in starea de
oprit. Ori ce activitate ce se afla in aceasta stare isi pastreaza datele insa in
ori ce moment ce sistemul decide ca are nevoie de memoria respectiva
altundeva activitatea ca fi distrusa si memoria eliberata.
4. In cazul in care activitatea se afla in starea de pauza sau oprit, sistemul poate
distruge activitatea cerandui sa se inchida sau o poate distruge direct. In
aceasta situate la repornire intra in starea de restart, unde aplicatia va incerca
sa restarteze activitatea si sa o restaureze la starea precedenta.

Mai departe vom prezenta diagrama cu cele mai importante etape din viata unei
activitati. In dreptungiuri sunte prezentate functiile de callback ce pot fi implementate
iar in ovale cele patru stari principale.

In diagrama se pot observa trei bucle importante:
1. Intreaga durata de viata a activitati, are loc intre primul apel al functiei
onCreate() pana la apelarea functiei onDestroy(). Activitatea va avea grija sa
seteze toate setarile principale ale activitati in metoda onCreate() si sa le
distruga in metoda onDestroy(). Chiar daca o data cu distrugerea activitati se
elibereaza si toata memoria ocupata de ea tot mai raman lucruri de care
trebuie avut grija, de exemplu da in metoda onCreate() pornim un thread ce
sa se ocupe de descarcarea diferitelor informati de pe internet trebuie avut
grisa sa il si orpim in metoda onDestroy() altfel acel tread va rula la nesfarsit

creand probleme serioase aplicatiei si poate pana sa forteze sistemul sa
inchida aplicatia.
2. Durata de viata vizibila, incepe cu metoda onStart() si se incheie cu apelul
onStop(). In toata aceasta perioada activitatea este vizibila pe ecran, chiar
daca nu este in fata stock-ului si prin urmare este imposibila interactionarea
cu utilizatorul. Intre aceste doua metode se face intretinerea resurselor ce vor
fi afisate utilizatorului. De exemplu in metoda onStart() poate fi inregistrat un
BroadcastReceiver ce sa mentina monitorizarea scimbarilor suferite de UI, iar
in aplelul functiei onStop(), cand activitatea nu mai poate fi vazuta de
utilizator, sa stergem inregistrarea. De mentionat este si faptul ca metodele
onStart() si onStop pot fi apelate de mai multe ori, apeluri provocate de
schimbarea stari activitati din visibil in ascuns.
3. Durata de viata in prim – plan, acest ciclu incepe cu metoda onResume() si se
incheie cu metoda onPause(). In tot acest timp activitatea se afla in prim plan
si poate interactiona cu utilizatorul. Trebuie totus avut grija, fiinda activitatea
poate trece destul de fregvent de la starea de resume la cea de pause. Teci in
aceasta parte codul trebuie sa fie cat mai clar, simplu si usor.

Android pune o lista de metode ce pot fi suprascrise pentru a face actiunile specifice
activitati create de noi. Toate metodele sunt optionale cu exceptia metodei
onCrete(Bundle) ce trebuie suprascrisa pentru a se face setarile initaiale. De altfel cu
ajutorul Bundle-ului putem afla daca metoda a fost creata pentru prima data sau nu.
Daca Bundle-ul este null asta inseamna ca nu a mai fost apelata nici o data iar in
caz contrar il putem folosi sa salvam date intre initializari. De exemplu rotirea
ecranului care cauzeaza distrugerea complecta a activitati desi noi dorim sa pastram
datele la reinitalizarea ei. De mentionat mai este si faptul ca metodele o data
suprascrise ar trebui sa apeleze si functia respectiva din superclasa.

● onCreate(): Metoda este apelata in tot deauna cand activitatea a fost creata,
urmatoarea functie apelata fiind onStart(). In aceasta functie ar trebui factute
toate initializarile initiale cum ar fi creerea de view-uri sau initializarea listelor.
Metoda mai vine si cu un bundle care de regula ii null cu exceptia cazului in
care activitatea a fost ingetata inainte.
● onRestart(): Apelata dupa ce activitatea a fost oprita si pornita din nou. In
aceasta etapa ar trebui restaurate datele sterse cat timp activitatea a fost
oprita. Intot deauna dupa aceasta metoda se apeleaza onStart().
● onStart(): Metoda este apelata in momentul in care activitatea devine vizibila.
Poate fi urmata fie de functia onResume(), in cazul in care activitatea a venit
in prim plan, fie de functa onStop(), caz in care activitatea si-a pierdut
vizibilitatea.
● onResume(): In acest punct activitatea este vizibila si in prim plan iar acuma
urmeaza sa se inceapa interactiunea cu utilizatorul. Urmatoarea metoda
apelata va fi mereu onPause()
● onPause(): Este apelata atunci cand sistemul decide afisarea unei activitati
precedente. In aceasta etapa este de recomandata salvarea tuturor datelor si
starilor despre view-uri precum si oprirea animatiilor sau a altor lucruri ce ar
putea consuma CPU-ul. Trebuie avut grija ca executa aceste metode sa se
execute cat mai rapid, activitatea precedenta nu va fi afisata pana la
executarea completa a acestei metode. Aceasta medota poate fi urmata de
metoda onResume(), daca tot aceasta activitate se intoarce in prim plan, sau
de metoda onStop(), daca metoda devine invizibila utilizatorului.
● onStop(): Aceasta metoda este apelata in momentul in care activitatea nu mai
este vizibila utilizatorului din cauza ca alta activitate este afisata in prim-plan
si o acopera pe aceasta. Acest lucru poate fi provocat fie ca a fost creata o
noua activitate, fie ca una existenta a venit in prim-plan sau chiar si fiinda
aceasta activitate a fost distrusa si nu mai este vizibila. Aceasta metoda poate
fi urmata fie de metoda onResume(), daca activitatea revine in prim plan si isi
incepe interactiunea cu utilizatorul, fie in caz contrar de metoda onDestroy()
● onDestroy(): Aceasta metoda este apelata cu un pic inaitea distrugeri
definitive a activitati. Acest lucru poate fi cauzat fie prin apelarea explicita a
metodei finish() pentru incetarea existentei activitati, fie in mod fortat de catre
sistem atunci cand sistemul decide ca nu mai este nevoie de aceasta
activitate si are nevoie de memorie pentu alte lucruri sau pur si simplu mentru
a salva spatiul. Se poate verifica din care motiv a fost distrusa activitatea cu
ajutorul metodei isFinishing(). Dupa aceasta medoda nu se mai apeleaza nici
o alta, aceasta fiind ultima.

De mentionat este faptul ca sistemul nu distruge activitati in mod aleatoriu ci bazat
pe un flag ce il detine fiecare activitate si spune sistemului daca activitatea poate fi
distrusa sau nu. Metodele care seteaza activitatea ca fiind distructibila sunt: onStop()

si onDistroy(). Iar metodele care seteaza activitatea ca fiind de destructibila sunt:
onCreate(), onRestart(), onStart() si onResume().

Metoda onPause() este mereu apelata chiar inaintea unei metode ce fac activitatea
destructibila, din acest modiv se recomanda salvarea tuturor datelor pentru a putea fi
recuperate in cazul in care sistemul distruge temporar activitatea si o redeschide, ca
utilizatori sa nu experimenteze astefel de probleme. Chiar daca exista si metoda
onSaveInstanceState(Bundle) care desi este creata special pentu a face acest lucru,
nefiind in ciclul de viata al activitati pot exista momente in care sa se seteze starea
de destructibil iar metoda onSaveInstanceState(Bundle) sau nu se apeleze.

In principal activitatea incepe sa fie destructibila incepand cu metoda onPause() si
se incheie cu metoda onResume().

1.4 Designul aplicatiei

Designul aplicatiilor android au inceput sa ajunga tot mai mult la o
standardizare dictata de Google prin limbajul de design dezvoltat in anul 2014
intitulai Material Design. Material design este concentrat pe efectul de fartie reala
tangibila. Toate efectele ,animatiile, umbrele si alte elemente din android sunt in asa
fel realizate in cat sa poata imita cartonase reale si alte obiecte ce pot fi atinse
precum si hartia si cerneala.

Google face progrese mari in promovarea acestui standard, introducand tot felul de
aplicatii secundare pentru facilitarea implementari a material design precum si
creerea librariei v7 appcompact ce permite implementarea si pe dispozitivele cu un
nivel de api mai mic de 21 (Android 5.0) dar totusi dezvoltate dupa anul 2009. O alta
promovare fiind si integrarea limbajului Material Design pe o mare parte a aplicatiilor
dezvoltate de Google ca de exemplu: YouTube, Gmail, Google Maps, Google Drive,
Google Docs, Inbox, Sheets and slides si o mica implicare si in browserele Google
Chorme precum si in Google Keep. Iar o alta fiind integrari a Material Design in
principalele interfate web pentru desktop cum sunt Google Drive, Docs, Sheets,
Slides, si Imbox.

Android pune la dispozitie o serie de elemente pentru a crea aplicati bazate pe
Material Design
● O noua tema
● Noi widget-uri pentru a putea crea view-uri mai complexe
● Noi API-uri pentru dezvoltarea de umbre si animati personificate

1.4.1 Tema Material

Tema material pune la dispozitie un stil nou pentru aplicatie, elemente de sistem ce
iti permit sa iti setezi propria paleta de culori si animati prestabilite pentru
feedback-ul la tingeri precum si animati pentru tranzactia animatiilor.

De asemenea poti sa iti personifici aspectul temei material cu ajutorul paletei de
culori ce o poti controla cu usurinta setandui identitatea brandului propriu. Poti de
altfel sa schimbi tenta de culoare a barei de actiune cat si a barei de status folosind
tema de atibute.

Cu ajutorul elementelor de sistem poti crea noi animati cat si animati la feedback-ului
de atingeri. Poti chiar sa setezi propria paleta de culori pentru animatiile de feedback
al atingerilor si a tranzactiilor de activitati.

Temele material sunt definite in modul urmator:

● @android:style/Theme.Material ​  (dark version)  
● @android:style/Theme.Material.Light ​  (light version)  
● @android:style/Theme.Material.Light.DarkActionBar
Ca exemplu vom afisa aspectul a daua teme, mai exact tema material intunecata si
cea luminoasa:

1.4.2 Listele si cardurile

Android pune la dispozitie doua metode de a afisa cardurile si listele in stilul material
design incluzand si animatiile aferente:

● RecyclerView este o versiune mai noua si mai conectabila a vechiului
ListView ce aduce o crestere de performanta precum si diferite tipuri de
aspect
● CardView permit afisarea de informati importante in cadrul unor carduri ce au
un aspect mai consistent si dau impresia ca ar putea fi atinse.

In continuare vom prezenta mai pe larg aceste doua elemente.

1.4.2.1 Listele

RecycleView este versiunea mai avansata si flexibila a vechiului ListView. Cu
ajutorul lui se pot afisa cantitati enorme de date ce pot fi scrolate intr-un mod foarte
eficient mentinanduse un numar limitat de viewuri ce sunt refolosite pentru afisarea
diferitelor tipuri de date. Folosirea lui RecycleView este cu atat mai folositoare in
situatiile in care tu ai deja ocolectie de date ce se schimba fregvent la rulare din
cauza actiunilor userului sau a internetului.

Clasa RecycleView simplifica foarte mult afisarea si intretinerea de seturi de date de
mari dimensiuni oferindune un manager de amplasare cu ajutorul pozitiilor
elementelor din lista. Precum si animatiile standarde oferite pentru operatiile comune
ale elementelor, cum a fi scoaterea si adaugarea elementelor din lista.

Pentru folosirea a RecycleView-ului tot ce ai nevoie este specificarea unui manager
de amplasare precum si unui adaptor ce detine setul de date. Adaptoarele pot fi
create destul de simplu tot ce este nevoie este extindere clasei
RecycleView.Adapter. Restul detaliilor de implementare pot diferi destul de mult si
nu exista un anumit standar general valabil. Aceste variati pot aparea din cauza
specificatiilor setului de date precum si din cauza tipului folosit la creerea view-ului.

Scopul managerului de amplasare este acela de a determina pozitiile view-ului in
interiorul recycleView si momentul in care sa se refoloseasca elementele view-ului
ce nu mai sunt vizibile utilizatorului. Pentru a refolosi anumite view-uri, managerul de
amplasare poate cere scimbarea datelor din interiorul unui view cu alte date
procurate din dataset. Acest lucru ii ofera o foarte mare putere managerului de
positionare facandul responsabil de cresterea substantiala a performantelor prin
evitarea de a creea view-uri inutile ce pot incetini foarte mult functia findViewById().

Desi se pot creea managere de positionare personificate extinzand doar clasa
RecyclerView.LayoutManager, totusi RecycleView pune la dispozitie trei manageruri
predefinite:
● LinearLayoutManager – ce are capacitatea de a afisa elementele intr-o lista
orizontala sau verticala cu functia de a scrola intrega lista.
● GridLayoutManager – afiseaza elementele sub forma de grila
● StaggeredGridLayoutManager – afiseaza elementele intr-o grila esantionata

1.4.2.1 Cardurile

CardView-urile au la baza clasa FrameLayout, pe care o si extind, si permit afisarea
informatiilor in carduri ce au un aspect consistent pe toata platforma. CardView-urile
avea diferite caracteristici cum ar fi umbrele si colturile rotunjite.

Setarea umbrei se poate face foarte usor, folosind parametrul
card_view:cardElecation. In versiunile mai noi decat Android 5.0 se face in mod real
simuland cu exactitate si dinamic o ridicare a cardului, iar in versiunile mai vechi
decat Android 5.0 acest lucru trebiuie facut intr-un mod programatic.

Cateva exemple de moduri in care se poate personaliza fiecare CardView ar fi:
● Setarea razei de rotunjire a colturilor cu ajutorul fisierului de view, se poate
face cu ajutorul atributului card_view:cardCornerRadius
● Setarea razei de rotunjire in interiorul codului se poate face ajutorul metodei
CardView.setRadius
● Secarea culori de fundal se poate face folosin atributul
card_view:cardBackgroundColor

Urmatorul cod arata cum sa implementezi un CardView in view-ul tau.

1.4.3 Umbrele

Android pe langa coordonatele x si y mai are si coordonata z, care este un
parametru ce reprezinta adancimea unui view. Tot acest parametru mai determina si
dimensiunea umbrelor, de exemplu un z mai mare determina o umbra mai mare. Dar
tot o data determina si ordinea in care sa fie desenate elementele in view, de
exemplu cu cat parametru z este mai mare cu atat elementul este mai deasupra.

Material designintroduce pentru elementele UI conceptul de nivel. Nivelul unui
element ajuta utilizatori sa inteleaga cat de important este un anumit element si la ce
element sa isi indrepte privirea.

Elementul de nivel este chiar parametrul z care determina aspectul vizual al
umbrelor. Cu cat nivelul este mai mare cu atat creste importanta elementului si
dimensiunea umbrei. Elementele cu nivel mai mare acopera elementele cu nivel mai
mic cu toate aceste nivelul nu afecteaza dimensiunea unui element. Nivelul este de
alfel util in situatiile in care se dorescte creerea unei animati de a ridica view-ul in
momentul unei actiuni, de a ridica view-ul.

Cand vorbim de animati lucrurile se schimba un pic. Formula reala a valori Z este in
felul urmator: Z = elevation + translationZ, in care elevation este valoarea setata de

noi ce ramane statica in timpul animatiilor iar translationZ este o componenta
dinamica din cadrul animatiei.

Pentru a seta parametrul de nivel in definitia unui view se poate folosi atributul
android::elevation, iar daca se doreste sa se faca acest lucru din cod poate fi folosita
metoda View.setElevation(). Pentru a modifica translatia in timpul unei aimati poate fi
folosita metoda View.setTranslationZ().
Se poate folosi si StateListAnimator pentru a specifica aceste animatii intr-un mod
mai declarativ. Acet lucru este foarte util in situariile in care animatia este declansata
de schimbari de stare, cum ar fi apasarea unui buton.

Forma unei umbre este stabilita de formele drawable-ului setat ca fundal al
elementului. Iar conturul elementului determina zona de feedback in caz de
interactiune fizica.

Ca exemplu vom lua un TextView la care ii vom seta propriul drawable denumit
“myrect”.

Drawable-ul a fost defiinit ca o forma dreptunghiulara, solida si cu colturile rotunjite,
precum in exemplul de mai jos.

In acest exemplu umbra va fi creata cu colturile rotunjite din cauza
drawable-uluisetat ca fundal. In cazul in care se doreste schimbarea acestu lucru si
scrierea a unei forme specifice pentru un anumit element se poate creea o clasa
care sa extinda clasa ViewOutlineProvider, iar in interiorul ei sa se suprascrie
metoda getOutline() iar in cele din urma sa atribui elementului tau noua forma creata
cu ajutorul functiei View.setOutlineProvider().

O alta metoda de a modifica forma unui element, deci si forma umbrei, este prin
decupare. Se pot executa decupari pentru a integra designul unui element cu
designul altui element sau pentru a modifica o imagine in functie de intrarile primite
de la utilizator.

Desi se poate schimba atat de usor forma unei umbre zona tactila a unui element
ramane aceasi iar in unele cazuri ne concordanta dintre zona tactila si cea desenata
ce contine si o umbra poate fi destul de deranjanta. Din acest motiv Android
introduce si o metoda, de decupare a formei elementului pe baza drawable-ului setat
ca fundal, numita View.setClipToOutline() sau mai poate fi folosit atributul
android::clipToOutline. Din nefericire doar formele simple precum dreptungi, cerc
sau dreptungi rotunjit suporta aceasta funtie. Pentru a verifica daca un element
suporta aceasta functie se poate folosi functia Outline.canClip().

Decuparea de elemente este o operatie destul de complexa asa ca nu se
recomanda animarea elementului daca i-a fost aplicat acest efect. Daca totusi se
doreste aplicarea unei animati se recomanda folosirea conceptului de “Reveal
Effect” pentru a crea iluzia unei animati.

1.4.3 Animatiile

Animatiile din material design ofera utilizatorilor un raspuns foarte lacut la toate
actiunile lor si ofera un efect de continuitate la toate interactiunile lui cu aplicatia
noastra. Tema realizata pe conceptul material desig are icluse o gama foarte larga
de animati predefinite pentru toate actiunile cum ar fi folosirea butoanelor sau
tranzitiile dinte activitati. De la versiunea Android 5.0 in sus avem si posibilitatea
creeri propriilor animati si modificarea celor existente.

Tema material design de altfel are introdusa in mot standard o gama de animati pe
elementele UI, oferint o confirmare a interactiuni in mod instant. Mai nou toate
animatiile in acest scop, in special cele pentru butoane, folosesc noua clasa
RippleDrawable ce ofera posibilitatea creeri unor tranziti intre starile butonului cu un
efect de tip unda. Pentru a aplica o anumita animatie standard pe un element se
poate face direct din fisierul XML specificandui ca background unul din fisiere, de
exemplu ?android::attr/selectableItemBackground sau
?android:attr/selectableItemBackgroundBorderless, iar API 21 introduce o noua
animatie ?android::attr/selectableItemBackgroundBorderless. Bine inteles ca ai si
optiunea sa iti definesti propria animatie folosid RippleDrawable ca si XML si sa
folosest elementul ripple.

In cazul animatiilor pentru tranzactiile dintre activitati material design introduce
tot felul de conectiuni vizuale intre diferite stari impreuna cu miscari si transformari
ale elementelor comune. Tot o data ai si trei tipuri de astfel de animati ce le poti
creea in mod liber:
● Tranziti de intrate – determina modul in care se animeaza o anumica activitate
atunci cand intra in scena. De exeplu, tranzatia de intrare “explode”, intra in
scena mariundusi dimensiunea din centru ecranului pana cand ajunge la
dimeniunile originale.
● Tranzitia de iesire – determina modul in care activitatea paraseste scena.
Folosin acelas exemplu dar pentru tranzitia de iesire, activitatea iese
micsorandusi dimensiunile dar ramanand centrat pana in momentul in care
dispare.
● Tranzitia de elemente comune – aceasta animatie se bazeaza pe un anumit
element ce este folosit in ambele activitati si il pastreaza vizibil in timp ce
activitatile isi schimba pozitile. De exemplu daca avem ca element comun o
anumita imagine ce este pozitionata in in locuri si dimensiuni diferite pe cele
doua activitati functia de changeImageTransform va deplasa si redimensiona
acea imagine intrun mod cat mai estetic in timp ce cele doua activitati se vor
inlocui.

Material design de la Android 5.0 suporta urmatoarele tranzacti intre activitati.
Aceste tipuri pot fi aplicate doar tranzactiilor pentru intrare si iesire.
● Explode – scoate sau introduce elementele din centrul scenei
● Slide – scoate sau introduce elementele de la una din marginile scenei
● Fade – scoate sau introduce elementele schimbandule opacitatea
Iar in cazul animatiilor personalizate pentru intrari si iesiri sunt suportate toate
tranzactiile ce extind clasa Visibility. Pentru tranzactiile cu elemente comune, din
Android 5.0 sunt suportate urmatoarele tranziti:
changeBounds, changeClipBounds, changeTransform, changeImageTransform.

1.4.4 Drawables

Drawable-urile sun elemente grafice ce te ajuta sa implementezi mult mai usor
material design in aplicatia ta. Exista trei tipuri de Drawable-urisuportate:
● Drawable-urile vectoriale – au uimitoarea capacitate de a se redimensiona
fara asi pierde din calitate si sunt ideale in cazul iconitelor bazate pe o singura
culoare.
● Drawable-uri de nuante – ofera posibilitatea stabiliri unui bitmap ca si masca
de alpha iar in momentul rulari sa se aplice o anumita culoare.
● Extractorul de culoare – ce iti permite in mod automat sa extragi culorile cele
mai proiminente dintr-un bitmap.

Drawable-urile de nuanta din Android 5.0 in sus poti oferi nuante bitmapurilor si
ninepatches definite ca masti de alfa. Poti oferi aceasta nuanta chiar si temelor si
resurselor cu ajutorul parametrilor android:tint si android:tintMode sau cu ajutorul
functiei setTint(). Aceasta abordare este foarte urila pentru ca tu creezi doar o data
nuanta si o poti aplica peste tot proiectul iar cand vrei sa schimbi nuanta trebuie sa
modifici doar intr-un singur loc.

Extractorul de culoare ce a fost introdus din API21 include o clasa numita Palette ce
iti ofere posibilitatea sa extragi cele mai proiminente culori dintro imagine. Aceasta
clasa poate extrage urmatorile tipuri de culori proiminente: Energica, Energica

intunecata, energica luminoasa, muta, muta intunecata, muta luminoasa. Pentru a
extrage aceste culori dintrun bitmap este suficienta trimiterea lui ca parametru
metodei statice Palette.generate(). Acest lucru trebuie facut neaparat intr-un tread
separat, de regula unde incarci imagine, daca acest lucru iti este indisponimil din
cauza diferitelor circumstante se poate folosi metoda Palette.generateAsync() in
treadul principal dar in schimb trebuie oferit si un listener. Pentru extragerea culorilor
din paleta se poate folosi metodele clasei Palette precum Palette.getVibrantColor.
Din pacate aceasta facilitate nu este inclusa in pachetul standard si trebuie inclusa
ulterior adaugandul ca modul Grafle-ului de dependinte precum in exemplu.

Drawable-ul vectorial este introdus din Android 5.0 si are capacitatea de a se
redimensiona fara a pierde din calitate. Avantajul principal este acela ca este
suficient un singur fisier cu imagine vectoriala pentru toate dimensiunile de ecrane si
nu precum bitmap-urile ce au nevoie de cate un fisier separeat pentru fiecare
desitate in parte. Pentru a crea o imagine vectoriala tot ce trebuie facut este sa
definesti detaliile formei in interiorul elementului XML <vector>, precum in urmatorul
exemplu ce creaza o imagine vectoriala in forma de inima.

2 Smart Ticket

In ultima vreme stiinta si tehnologia au evoluat enorm, oferind omeniri o
gramada de facilitati precum: accesul gratuit la informare, transporturi de inalta
viteza, posibilitatea comunicari instante indiferent de distanta. Cu toate acestea mi
se pare foarte trist ca omenirea a pus prea mult accentul pe nevoi de lux si au
pierdut din vedere necesitatile zilnice ale oamenilor, mai exact nevoia de hrana. Ha
este un lucru remarcabil ca aproape orice locuinta din ziua de azi are acces la apa
potabila, curent si internet dar tot o data mi se pare deprorabil ca in secolul XXI sa
mai avem printre noi oameni care sa sufere de foame.

Sistemul folosit in zilele noastre pentru distribuirea de hrana, bazat pe bani, mi se
pare un pic cam inaccesibil pentru toata lumea si prea generalist. Generalist in
sensul ca cu bani nu se poate acizitiona doar hrana ci ori ce bun se doreste, astfel
oferinduse banilor prea multa putere pentru a putea fi distribuit cu usurinta printre
oameni. In ciuda faptului ca statul a incercat deja sa introduca un sistem nou ce sa
rezolve aceasta problema prin intermediul bonurilor de masa, totusi mi se pare ca
acest sistem este mult mai inaccesibil decat bani, singurele persoane ce pot oferi
astfel de bonuri fiind firmele. Pe deasupra mi se pare ca nu este suficient de
restrictiv cu privire la folosirea lor permitantuse achizitionarea cu ajutorul acelor
bonuri si a altor produse in afara produselor alimentare. Din acest motiv am incercat
sa dezvolt un nou sistem numit Smart Ticket.

Smart ticket este un sistem bazat pe tickete de masa ce ofera o distribuire foarte
usoara a ticketelor prin aproape orice mediu social precum si prin tiparirea fizica a
ticketelor. Ticketele pot fi achizitionate de ori ce persoana cu ajutorul aplicatiei
mobile Smart Ticket. Iar folosirea lor poate fi facuta in orice restaurant partener prin
simpla oferire a codului QR de pe ticket unuia dintre vanzatori restaurantului.
Scanarea ticketelor se poate face la fel de usor de catre orice utilizator al aplicatiei
ce a fost recunoscut ca angajat de catre patronul restarantului. Ticketele nu pot fi
folosite decat strict pentru achizitionarea unui meniu de restaurant.

Aplicatia Smart Ticket are la baza trei accese diferite, fiecare din acest acces avand
functi diferite precum si informatiidiferite. Aceste trei tipuri de acces sau de conturi
pot fi vazute si ca accese suplimentare fata de contul precedent. Cele trei accese
sau conturi sunt:
● Contul de client – Acest cont are doar drepturile genereale cum ar fi:
cumpararea de tickete, printarea si trimiterea ticketelor altor persoane,
folosirea uni ticket.

● Contul de vanzator – Acesta are toate drepturile de client si cateva drepturi
extra cum ar fi: verificarea unui ticket si incasarea lui. Vanzatori sunt simpli
clienti ce au fost promovati la acest grad de catre o persoana cu cont de
patron, acesta asumandusi responsabilitatea pentru actiunile luate de
vanzatori promovati de el.
● Contul de patron – Acesta are toate drepturile de vanzator si cateva extra cum
ar fi: angajarea unui utilizator, concedierea unui vanzator, verificarea unui
vanzator si multe altele.

2.1 Mod de folosire

Aproape toata atentia mea a fost distribuita pentru a crea o aplicatie cat mai
usor de folosit si de inteles pentru toata lumea. Astfel incat oricine doreste
achizitionarea sau scanarea unui ticket sa poata realiza aceste actiuni fara prea
mare bataie de cap. Un alt criteriu important la dezvoltarea aplicatiei a fost
intuitivitatea, incercand sa dezvolt aplicatia astfel incat sa fie folosita intr-un mod cat
mai intuitiv. Astfel etapele pentru achizitionarea unui ticket sunt relativ usoare.

Primul ecran care vine in intampinarea utilizatorilor, fie el si pentru cateva secunde,
este acela de splash screen. Acest ecran apare de fiecare data cand este deschisa
aplicatia, avand o compozitie foarte simpla, compusa din logoul aplicatiei in centru
exranului iar ca si fundal fiind culuarea principala a aplicatiei. Rolul acestui ecran
este unul foarte important dar si estetic in acelas timp, permitand aplicatiei sa isi faca
toate initializarile si alocarile de memorie mascand tot o data acel ecran alb afisat de
android pana la finalizarea initializari, enervant cand apare pentru o scurta perioada
de timp ca un blit ititant pentru ochi. Puterea unui splash screen nu se opreste aici, el
poate de altfel sa faca comunicari cu servarul despre identitatea dispozitivului si
chiar sa faca logari automate.

Primul ecran interactiv de care se va lovi orice utilizator este acela de login/register.
Acest ecran are formidabila posibilitate de a permite atat logarea unui utilizator cat si
inregistrarea unui nou utilizator.

Compozitia acestui ecran este una simpla fiind formata practic din trei sectiuni.
Prima sectiune aflata in partea superioara a ecranului este acea de logo.
Sectiunea a doua este acea de campuri, aici se pot intalni cele doua campuri: de
email si de parola. Cele doua campuri sunt folosite atat pentru logarea unui user
existent, in cazul in care userul nu exista campul cu emailul va deveni rosu si va
prezenta o animatie de scuturare, cat si pentru inregistrarea unui nou utilizator, din
nou in cazul in care emailul este deja folosit va deveni rosu afisand aceasi animatie.
Sectiunea a treia este acea de butoane formata din doua butoane principale: butonul
de logare, care trimite o cerere de verificare a datelor din campuri catre server si
asteapta confirmarea servarului daca datele sunt valide sau nu, si butonul de
inregistrare care trimite o cerere cu valorile din cele doua campuri la server pentru
inregistrarea lor. Daca Servarul constata ca emailul este deja folosit, prima data
verifica daca emailul a fost confirmat de proprietar, in caz contrar va trimite o cerere
de refolosire a emailului catre acea adresa iar pe utilizator il va introduce intr-un
ecran de asteptare a confirmari emailului. Daca adresa de email nu a fost folosita ii
va permite automat intrarea in cont trimitandui pe adresa de email un cod de
confirmare a adresei entru securizarea contului.

Urmatorul ecran care il intampina pe utilizator este ecranul principal care poate diferi
de la utilizator la utilizator in functie de tipul de acces oferit. In acest ecran pentru

simplitatea aplicatiei am preferat sa exclud meniul din stanga al aplicatiei prestabilit
de android si sa foloses o bara de taburi in partea de jos al aplicatiei.

Similar Posts

  • Constantin NEGUȚU [626329]

    Constantin NEGUȚU 32 08.03.2018 Cursul nr. 3 ELEMENTE DE MECANICĂ ANALITICĂ 1. Starea mecanică a unui sistem În mecanica clasică, forma cea mai generală a ecuațiilor de mișcare sau a altor legi care descriu evoluția temporală a sistemelor mecanice este dată de formalismele Lagrange, Hamilton sau Hamilton – Jacobi. Mecanica analitică își propune să stabilească…

  • INTRОDUСЕRЕ………………………………………………………………. ……………………….. … 2 CAPITOLUL 1. ASPECTE… [624704]

    СUPRINS INTRОDUСЕRЕ………………………………………………………………. ……………………….. … 2 CAPITOLUL 1. ASPECTE TEORETICE PRIVIND ANALIZA ECONOMICO – FINANCIARĂ …………………………………… ………………………………… 3 1.1.Analiza economico -financiar ă – funcții, etape, obiective……………………….. 3 1.2.Factorii care influențeză rezultatele economico -financiare……………………… 4 1.3.Metodologia analizei economico -financiare……………………………………. 6 CAPITOLUL 2. ANALIZA RENTABILITĂȚII…………………………………… 16 2.1. Analiza ratei re ntabilității comerciale…………………………………………… 17 2.2. Analiza ratei rentabilității resurselor…

  • Planul Naţional de Cercetare-Dezvoltare şi Inovare II [311390]

    [anonimizat]-II-RU-TE-2014-4 Documentul folosește caractere Times New Roman de 12 puncte, spațiere între linii de 1.5 și margini de 2 cm. Orice modificare a acestor parametri ([anonimizat] a legendelor acestora), precum și depășirea numărului maxim de pagini stabilit pentru fiecare secțiune duce la descalificarea automată a cererii din competiție. [anonimizat]. La fiecare secțiune se va menține…

  • .7. Declaratie Persoane Aflate In Intretinere Sa [619882]

    DECLARATIA CONTRIBUABILULUI Subsemnatul / Subsemnata ……………………………………. salariat / salariata la Departamentul ………………………………….. Serviciul ……………………………………., avand in vedere prevederile Art. 45 din Legea nr. 571/2003 – Codul Fiscal, cu modificarile si completarile ulterioare, in vederea stabilirii nivelului deducerii personale avand in vedere si persoanele aflate in intretinerea mea, prin prezenta declar pe proprie raspundere ca datele…

  • Univ еrsitаtеа Аlеxаndru I оаn Сuzа din I аși [600475]

    Univ еrsitаtеа „Аlеxаndru I оаn Сuzа” din I аși Fасultаtеа dе Есоnоmiе și Аdministr аrеа Аfасеrilоr Mаstеr Sistеmе Infоrmаțiоnаlе реntru Аfасеri Rеfеrаt lа disсiрlinа Е-dосumеntе și Е-соmuni саrе сu tеmа: Wеb Sеrviсеs Сооrdоnаtоr, Stud еnt, Șеrbаn Vаlеriсă Grеаvu Соstаș Сristiаn аnul 2, gru ра 1 310407 РM142136 Iаși 2015 2 Сuрrins: Intrоduсеrе ………………………….. ………………………….. ……………………………..

  • Licenta Draft 1 [615730]

    Facultatea de Inginerie Electrică și Știința Calculatoarelor Automatică și Informatică Aplicată Departamentul Automatică și Tehnologia Informației 1 Curpins Figuri și tabele………………………………………………………………………………………………………………………………………………… 1. INTODUCERE ………………………………………………………………………………………………………………………………….. 1.1. Context ……………………………………………………………………………………………………………………………………. 1.2. Stagiul actual al temei …………………………………………………………………………………………………………. 1.3. Motivația alegerii temei ………………………………………………………………………………………………………… 1.4. Obiectivele lucrării și structură……………………………………………………………………………………………. 2. ROBOTUL HOLONOMIC …………………………………………………………………………………………………………….. 2.1. Cinematica roboților mobili…………………………………………………………………………………………………. 2.2. Robotul holonomic …………………………………………………………………………………………………………………