Diagrammas un datu diagrammas ir brīnišķīgi rīki attiecību ilustrēšanai, datu tendenču attēlošanai un mērķu izsekošanai Android lietotnēs. Es to redzēju pats pirms vairākiem gadiem, kad mans bijušais students ieguva pirmo vietu studentu mobilo lietotņu konkursā, kuru sponsorēja Čārlstonas Aizsardzības darbuzņēmēju asociācija. Galvenā uzvarējušās lietotnes "Diabēts un es" iezīme bija spēja attēlot ikdienas cukura līmeni.
Kā vēl vienu piemēru ņemiet vērā svara izsekošanas lietojumprogrammu, kas attēlo progresu attiecībā pret mērķa svaru. 1. attēlā parādīts, kā šāda lietojumprogramma varētu izskatīties Android tālrunī. Attēlā tiek izmantota sarkanā līnijas diagramma, lai parādītu vidējos mēneša svarus 2017. gadam. Tas parāda mērķa svaru kā zaļu taisnu līniju netālu no apakšas. (Lai gan līniju diagrammā norādītās datu vērtības ir hipotētiskas, tās ir reālas attiecībā uz šī raksta autoru.)
Džons I. MūrsŠajā rakstā es izmantošu savu atvērtā pirmkoda bibliotēku GraphLib, lai parādītu Android matemātisko funkciju grafiku pamatus. Tā nav tā pati diagrammu bibliotēka, kuru mans students izmantoja savai lietojumprogrammai. Patiesībā tas ir daudz vienkāršāk un vieglāk lietojams.
lejupielādēt Lejupielādēt GraphLib Iegūstiet šajā rakstā ievadītās atvērtā pirmkoda Android grafiku bibliotēkas avota kodu. Izveidoja Džons I. Mūrs.Pārskats par GraphLib
GraphLib
sastāv no viena interfeisa un astoņām klasēm. Trīs no šīm klasēm atrodas bibliotēkas iekšienē, un tām ir piekļuve tikai pakotnēm, tāpēc, lai izmantotu GraphLib, jums tās nevajadzēs saprast. Divām no atlikušajām klasēm ir ļoti vienkārša funkcionalitāte, un pārējās nav grūti uzņemt.
Zemāk es aprakstīšu GraphLib saskarni un katru no tās astoņām klasēm. Ņemiet vērā, ka bibliotēkas izstrādei un testēšanai es izmantoju Java 8 funkcijas, piemēram, funkcionālās saskarnes un lambda izteiksmes, taču modificēt šīs funkcijas iepriekšējām Java versijām ir samērā vienkārši.
GraphLib funkcionālais interfeiss
Kā parādīts 1. saraksta saskarnē Funkcija
ir tikai viena abstrakta metode, un tāpēc tā ir funkcionāla saskarne. Ņemiet vērā, ka šī saskarne ir aptuveni līdzvērtīga Java 8 DoubleUnaryOperator
, atrodams iepakojumā java.util.function
. Atšķirība ir tā Funkcija
neizmanto citas Java 8 funkcijas, izņemot anotāciju @ Funkcionālā saskarne
. Šīs anotācijas noņemšana ir vienīgās izmaiņas, kas nepieciešamas, lai veiktu Funkcija
saskarne ir saderīga ar iepriekšējām Java versijām.
Saraksta 1. saskarnes funkcija
pakete com.softmoore.android.graphlib; @FunctionalInterface publiskā saskarne Funkcija {public double apply (double x); }
Uzziniet par lambda izteicieniem
Lambda izteiksmes, kas pazīstamas arī kā slēgšanas, funkciju literāļi vai vienkārši lambdas, apraksta funkciju kopu, kas definēta Java specifikācijas pieprasījumā (JSR) 335. Mazāk formāli lambda izteicienu ievadi ir sniegti Java apmācības jaunākās versijas sadaļā; JavaWorld rakstā "Java programmēšana ar lambda izteiksmēm" un pāris Braiena Geca rakstos "State of the lambda" un "State of the lambda: Libraries edition".
GraphLib klases
Klases Punkts
un Etiķete
ir salīdzinoši vienkārši: Punkts
iekapsulē dubultu vērtību pāri, kas apzīmē punktu x, y- lidmašīna un Etiķete
iekapsulē dubultu vērtību un virkni, kur dubultā vērtība apzīmē punktu uz ass, un virkne tiek izmantota šī punkta apzīmēšanai. 1. attēlā sniegtajā piemērā punkti tiek izmantoti, lai aprakstītu līnijas diagrammu un apakšējās ass etiķetes, parādot viena burta saīsinājumus mēnešiem. Es sniegšu vairāk piemēru, kas ilustrē šo nodarbību izmantošanu vēlāk rakstā.
Klases GraphFunction
, GraphPoints
, un Ekrāna punkts
ir ne tikai ļoti vienkārši, tie ir arī bibliotēkas iekšējie un tiem ir tikai piekļuve pakotnēm. Lai izmantotu bibliotēku, jums patiesībā nav jāsaprot šīs klases, tāpēc šeit tās īsi aprakstīšu:
GraphFunction
iekapsulē funkciju (t.i., klasi, kas ievieš saskarniFunkcija
) un krāsu, ko izmanto šīs funkcijas zīmēšanai.GraphPoints
iekapsulē punktu sarakstu kopā ar krāsu, ko izmanto to uzzīmēšanai. Šo klasi iekšēji izmanto gan punktu zīmēšanai, gan līniju diagrammu zīmēšanai.Ekrāna punkts
iekapsulē veselu skaitļu vērtību pāri, kas attēlo pikseļu koordinātas Android ierīces ekrānā. Šī klase ir līdzīga, bet vienkāršāka nekā Android klasePunkts
iepakojumāandroid.graphics
.
Es norādīju šo klašu pirmkodu, ja jūs interesē sīkāka informācija.
Trīs atlikušās klases GraphLib bibliotēkā ir Grafiks
, Grafiks. Celtnieks
, un GraphView
. Ir svarīgi saprast lomu, ko katrs no viņiem spēlē Android lietojumprogrammā.
Klase Grafiks
satur informāciju par zīmējamām krāsām, punktiem, etiķetēm, grafikiem utt., bet būtībā nav atkarīga no Android grafikas detaļām. Kamēr Grafiks
ir daudz lauku, tiem visiem ir noklusējuma vērtības, un tāpēc ir lietderīgi izmantot Builder modeli, lai izveidotu šīs klases eksemplārus. Klase Grafiks
satur ligzdotu statisko apakšklasi ar nosaukumu Celtnieks
, ko izmanto, lai izveidotu Grafiks
objektiem.
Abas klases Grafiks
un Grafiks. Celtnieks
no izstrādātāja viedokļa iet kopā, un tas būtībā jāsaprot kā viens. Patiesībā jums ir jāsaprot tikai tas, kā izmantot ligzdoto klasi Celtnieks
izveidot Grafiks
objekts. Izstrādātāji patiesībā neko nedara tieši ar Grafiks
objekts pēc tam, kad tas ir izveidots, nevis nodot to a GraphView
objekts, kas visu attēlo Android ierīcē.
2. saraksts apkopo klasē pieejamās metodes Grafiks. Celtnieks
. Vēlākos piemēros būs parādīts, kā veidotāju izmantot, lai izveidotu Grafiks
objektiem. Pagaidām ir pietiekami atzīmēt, ka, izņemot noklusējuma konstruktoru (2. saraksta pirmā rinda) un būvēt()
metodi (2. saraksta pēdējā rinda), visas pārējās metodes atgriež Celtnieks
objekts. Tas ļauj izveidot ķēdes ar celtnieku metodēm.
Saraksts 2. Metožu kopsavilkums klasē Grafiks. Celtnieks
public Builder () public Builder addFunction (Function function, int graphColor) public Builder addFunction (Function function) public Builder addPoints (Point [] points, int pointColor) public Builder addPoints (List points, int pointColor) public Builder addPoints (Point [] punkti) public Builder addPoints (punktu saraksti) public Builder addLineGraph (Point [] punkti, int lineGraphColor) public Builder addLineGraph (List points, int lineGraphColor) public Builder addLineGraph (Point [] punkti) public Builder addLineGraph (saraksts punkti) public Builder setBackgroundColor (int bgColor) public Builder setAxesColor (int axesColor) public Builder setFunctionColor (int functColor) public Builder setPointColor (int pointColor) public Builder setWorldCoordinates (double xMin, double xMax, double yMin, double yMax) public Builder setX ) public Builder setXTicks (double [] xTicks) public Builder setXTicks (List xTicks) public Builder setYTicks (double [] yTicks) public Builder setYTicks (saraksts yT icks) public Builder setXLabels (Label [] xLabels) public Builder setXLabels (List xLabels) public Builder setYLabels (Label [] yLabels) public Builder setYLabels (List yLabels) public Graph build ()
2. sarakstā atzīmēsiet, ka daudzas no metodēm ir pārslogotas, lai pieņemtu objektu masīvus vai objektu sarakstus. Šajā rakstā es priekšroku dodu masīviem, nevis sarakstiem, tikai tāpēc, ka masīvus ir daudz vieglāk inicializēt, bet GraphLib
atbalsta abus. Tomēr Java 9 būs ērtas rūpnīcas metodes kolekcijām, tādējādi novēršot šo nelielo masīvu priekšrocību. Ja šī raksta laikā Java 9 būtu plaši izmantota, es labprātāk būtu izvēlējies sarakstus, nevis abos masīvus GraphLib
un turpmākie piemēri.
Builder modelis
Lai uzzinātu vairāk par Builder modeli, skatiet Joshua Bloch efektīvā Java otro izdevumu vai Dustin Marx JavaWorld rakstu "Pārāk daudz parametru Java metodēs, 3. daļa: Builder modelis".
Tiek sauktas lietotāja saskarnes klases Android ierīcēs skati, un klase Skats
iepakojumā android.view
ir lietotāja interfeisa komponentu pamatelements. Skats aizņem taisnstūra laukumu ekrānā un ir atbildīgs par zīmēšanu un notikumu apstrādi. No mantojuma viedokļa klase Skats
ir senču klase ne tikai lietotāja saskarnes vadīklas (pogas, teksta lauki utt.), bet arī izkārtojumi, kas ir neredzamas skatu grupas, kas galvenokārt ir atbildīgas par savu bērnu sastāvdaļu sakārtošanu.
Klase GraphView
pagarina klasi Skats
un ir atbildīgs par a Grafiks
Android ierīces ekrānā. Tādējādi klase GraphView
ir vieta, kur notiek visa zīmēšana.
Izmantojot GraphLib
Lietotāju saskarņu izveidei Android ir divas pieejas: procesuāla pieeja (Java avota kodā) vai deklaratīvā pieeja (XML failā). Jebkurš no tiem ir derīgs, taču vienprātība ir pēc iespējas vairāk izmantot deklaratīvo pieeju. Saviem piemēriem esmu izmantojis deklaratīvu pieeju.
Programmas izmantošanai ir pieci galvenie soļi GraphLib
bibliotēka. Pirms sākat, lejupielādējiet apkopoto Java avota kodu GraphLib bibliotēkai.
1. solis: padariet graphlib.jar pieejamu savam Android projektam
Izmantojot Android Studio, izveidojiet jaunu projektu un nokopējiet JAR failu graphlib.jar
uz libs
jūsu projekta apakšdirektorijs lietotne
direktorijā. Android studijā pārslēdziet mapes struktūru no Android uz Projekts. Tālāk libs
mape (ligzdota lietotne
mapi), ar peles labo pogu noklikšķiniet uz JAR faila un noklikšķiniet uz Pievienot kā bibliotēku. Ar šo pēdējo darbību JAR fails tiks pievienots jūsu lietotnes sadaļā Atkarības build.gradle
failu. Ja jums nepieciešama palīdzība šajā darbībā, skatiet sadaļu "Kā pievienot burku ārējās bibliotēkās Android Studio".
2. solis. Izveidojiet Android darbību, kas izmantos GraphLib
Android lietojumprogrammās aktivitāte apzīmē vienu ekrānu ar lietotāja saskarni. Darbības galvenokārt tiek definētas divos failos: XML failā, kas deklarē lietotāja saskarnes izkārtojumu un komponentus, un Java failā, kas nosaka izpildlaika funkcionalitāti, piemēram, notikumu apstrādi. Kad tiek izveidots jauns projekts, Android Studio parasti izveido noklusējuma darbību ar nosaukumu MainActivity
. Izmantojiet šo darbību vai izveidojiet jaunu savai lietojumprogrammai.
3. darbība. Darbības izkārtojumam pievienojiet GraphView
Darbības izkārtojuma XML failā jūs paziņosiet a GraphView
objektu tādā pašā veidā, kā jūs deklarējat pogu vai teksta skatu, izņemot to, ka jums ir jānorāda pilns paketes nosaukums GraphView
. 3. sarakstā ir redzams izkārtojuma faila fragments, kas deklarē a GraphView
kam seko a Teksta skats
kā daļa no vertikālā lineārā izkārtojuma. Ievērojot ieteicamo praksi, faktiskās platuma un augstuma vērtības GraphView
ir definēti atsevišķi izmērs
resursu faili, kur dažādi resursu faili sniedz vērtības dažādiem ekrāna izmēriem / blīvumiem. (Piezīme. Tālāk sniegtajos piemēros abām vērtībām izmantoju 325.)
Saraksts 3. GraphView un TextView deklarēšana izkārtojuma XML failā
4. solis. Importējiet bibliotēkas nodarbības aktivitātē
4. sarakstā tiek parādīts lietojumprogrammas importēšanas priekšrakstu saraksts, ja bibliotēkas klases tiek importētas atsevišķi. Importa sarakstu var saīsināt vienā rindā kā importēt com.softmoore.android.graphlib. *
ja vēlaties. Personīgi es gribētu redzēt izvērsto sarakstu, kā parādīts 4. sarakstā.
Saraksts 4. Importējiet bibliotēkas klases
importēt com.softmoore.android.graphlib.Function; importēt com.softmoore.android.graphlib.Graph; importēt com.softmoore.android.graphlib.GraphView; importēt com.softmoore.android.graphlib.Label; importēt com.softmoore.android.graphlib.Point;
5. solis. Izveidojiet Graph objektu un pievienojiet to GraphView
5. saraksts parāda vienkārša grafa objekta izveidošanu - šajā gadījumā diagrammas objektu, kas izmanto visas noklusējuma vērtības. Būtībā tas satur tikai x- un y-axes, kur abu asu vērtības svārstās no 0 līdz 10. Sarakstā ir iestatīts arī ekrāna nosaukums un teksta skata teksts zem diagrammas.
Saraksts 5. Izveidojiet objektu Graph un pievienojiet to GraphView
Grafika diagramma = new Graph.Builder () .build (); GraphView graphView = findViewById (R.id.graph_view); graphView.setGraph (grafiks); setTitle ("Empty Graph"); TextView textView = findViewById (R.id.graph_view_label); textView.setText ("Asu grafiks");
2. attēlā parādīts šīs lietojumprogrammas palaišanas rezultāts Android ierīcē.
Džons I. MūrsGraphLib izmantošana Android lietojumprogrammās
Raksta atlikušajā daļā es pievērsīšos GraphLib bibliotēkas reālai izmantošanai Android lietojumprogrammu izstrādē. Es sniegšu septiņus piemērus ar īsiem aprakstiem un pirmkodu fragmentiem. Ņemiet vērā, ka šo piemēru Java kodu saraksts ir vērsts uz to izmantošanu Grafiks. Celtnieks
lai izveidotu atbilstošu Grafiks
objekts. Zvani uz findViewById ()
, setGraph ()
, setTitle ()
utt., būtu līdzīgi tiem, kas parādīti 5. sarakstā, un nav iekļauti kodu sarakstos.