Kaaviot ja datakaaviot ovat upeita työkaluja suhteiden havainnollistamiseksi, datatrendien kuvaamiseksi ja tavoitteiden seuraamiseksi Android-sovelluksissasi. Näin tämän itse useita vuosia sitten, kun entinen opiskelijani voitti ensimmäisen sijan opiskelijoiden mobiilisovelluskilpailussa, jota sponsoroi Charleston Defense Contractors Association. Voitetun sovelluksen "Diabetes ja minä" keskeinen piirre oli kyky piirtää päivittäiset sokeritasot.
Toisena esimerkkinä on painonseurantaohjelma, joka kuvaa edistymistä maalipainoon nähden. Kuva 1 kuvaa, miltä tällainen sovellus saattaa näyttää Android-puhelimelta. Kuvassa käytetään punaista viivakaaviota vuoden 2017 keskimääräisten kuukausipainojen osoittamiseksi. Se osoittaa maalipainon vihreänä suorana viivana lähellä pohjaa. (Vaikka viivakaaviossa esitetyt data-arvot ovat hypoteettisia, ne ovat realistisia tämän artikkelin kirjoittajan suhteen.)
John I.MooreTässä artikkelissa käytän avoimen lähdekoodin kirjastoa GraphLibiä esittelemään matemaattisten funktioiden kuvaajien kuvaamisen perusteet Androidissa. Se ei ole sama graafikirjasto, jota opiskelijani käytti sovelluksessaan. Itse asiassa se on paljon yksinkertaisempi ja helpompi käyttää.
Lataa Lataa GraphLib Hanki tässä artikkelissa esitetyn avoimen lähdekoodin Android-graafikirjaston lähdekoodi. Luonut John I.Moore.Yleiskatsaus GraphLibiin
KaavioLib
koostuu yhdestä liitännästä ja kahdeksasta luokasta. Kolme näistä luokista on kirjaston sisäisiä, ja niillä on vain pakettien käyttöoikeus, joten sinun ei tarvitse ymmärtää niitä voidaksesi käyttää GraphLibiä. Kahdella jäljellä olevasta luokasta on hyvin yksinkertainen toiminnallisuus, ja loput eivät ole vaikeita poimia.
Seuraavassa kuvaan GraphLib-käyttöliittymää ja kaikkia sen kahdeksan luokkaa. Huomaa, että käytin Java 8 -ominaisuuksia, kuten toiminnallisia rajapintoja ja lambda-lausekkeita, kirjaston kehittämiseen ja testaamiseen, mutta näiden ominaisuuksien muokkaaminen aikaisemmille Java-versioille on suhteellisen helppoa.
GraphLibin toiminnallinen käyttöliittymä
Kuten luettelossa 1 on esitetty, käyttöliittymä Toiminto
on vain yksi abstrakti menetelmä ja on siksi toiminnallinen rajapinta. Huomaa, että tämä käyttöliittymä vastaa suunnilleen Java 8: ta DoubleUnaryOperator
, löytyy pakkauksesta java.util.toiminto
. Ero on siinä Toiminto
ei käytä muita Java 8 -ominaisuuksia kuin merkinnät @FunctionalInterface
. Tämän merkinnän poistaminen on ainoa muutos, joka tarvitaan Toiminto
käyttöliittymä yhteensopiva aiempien Java-versioiden kanssa.
Listaus 1. käyttöliittymä Toiminto
paketti com.softmoore.android.graphlib; @FunctionalInterface julkinen käyttöliittymä Toiminto {public double apply (double x); }
Opi lambda-ilmaisuista
Lambda-lausekkeet, jotka tunnetaan myös nimellä sulkemiset, funktiolitraalit tai yksinkertaisesti lambdas, kuvaavat joukkoa Java Specification Request (JSR) 335: ssä määriteltyjä ominaisuuksia. Vähemmän muodollisia esittelyjä lambda-lausekkeisiin on Java-opetusohjelman uusimman version osiossa; JavaWorld-artikkelissa "Java-ohjelmointi lambda-lausekkeilla" ja parissa Brian Goetzin artikkelissa "State of the lambda" ja "State of the lambda: Libraries edition".
GraphLib-luokat
Luokat Kohta
ja Tarra
ovat suhteellisen yksinkertaisia: Kohta
kapseloi parin kaksoisarvoja, jotka edustavat pistettä x, y-taso, ja Tarra
kapseloi kaksinkertaisen arvon ja merkkijonon, jossa kaksoisarvo edustaa pistettä akselilla ja merkkijonoa käytetään kyseisen pisteen merkitsemiseen. Kuvan 1 esimerkissä käytetään pisteitä viivakaavion ja alareunassa olevan akselin etikettien kuvaamiseen, joissa esitetään yhden kirjaimen lyhenteet kuukausille. Annan lisää esimerkkejä näiden luokkien käytöstä myöhemmin artikkelissa.
Luokat GraphFunction
, GraphPoints
ja ScreenPoint
eivät ole vain hyvin yksinkertaisia, ne ovat myös kirjaston sisäisiä ja niillä on vain pakettien käyttöoikeus. Sinun ei oikeastaan tarvitse ymmärtää näitä luokkia voidaksesi käyttää kirjastoa, joten kuvaan ne vain lyhyesti tässä:
GraphFunction
kapseloi toiminnon (eli luokan, joka toteuttaa rajapinnanToiminto
) ja kyseisen toiminnon piirtämiseen käytetty väri.GraphPoints
kapseloi luettelon pisteistä yhdessä niiden piirtämiseen käytetyn värin kanssa. Tätä luokkaa käytetään sisäisesti sekä pisteiden piirtämiseen että viivakaavioiden piirtämiseen.ScreenPoint
kapseloi parin kokonaislukuarvoja, jotka edustavat pikselikoordinaatteja Android-laitteen näytöllä. Tämä luokka on samanlainen kuin Android-luokka, mutta yksinkertaisempiKohta
pakkauksessaandroid.graphics
.
Olen toimittanut näiden luokkien lähdekoodin, jos olet kiinnostunut yksityiskohdista.
GraphLib-kirjaston kolme jäljellä olevaa luokkaa ovat Kaavio
, Kaavio.Rakentaja
ja GraphView
. On tärkeää ymmärtää, mikä rooli heillä on Android-sovelluksessa.
Luokka Kaavio
sisältää tietoja piirrettävistä väreistä, pisteistä, tarroista, kaavioista jne., mutta on olennaisesti riippumaton Android-grafiikan yksityiskohdista. Sillä aikaa Kaavio
on paljon kenttiä, niillä kaikilla on oletusarvot, ja siksi on järkevää käyttää Builder-mallia tämän luokan esiintymien luomiseen. Luokka Kaavio
sisältää sisäkkäisen staattisen alaluokan nimeltä Rakentaja
, jota käytetään luomiseen Kaavio
esineitä.
Kaksi luokkaa Kaavio
ja Kaavio.Rakentaja
menevät yhdessä, kehittäjän näkökulmasta, ja ne tulisi ymmärtää lähinnä yhtenä. Todellisuudessa sinun on vain ymmärrettävä, kuinka sisäkkäistä luokkaa käytetään Rakentaja
luoda a Kaavio
esine. Kehittäjät eivät todellakaan tee mitään suoraan Kaavio
objekti sen jälkeen kun se on luotu muu kuin välittää se a: lle GraphView
objekti, joka näyttää kaiken Android-laitteella.
Listaus 2 sisältää yhteenvedon luokassa käytettävissä olevista menetelmistä Kaavio.Rakentaja
. Myöhemmissä esimerkeissä kuvataan, miten Builder-mallia käytetään luomiseen Kaavio
esineitä. Toistaiseksi riittää huomata, että paitsi oletusrakentaja (luettelon 2 ensimmäinen rivi) ja rakentaa()
(viimeinen rivi luettelossa 2), kaikki muut menetelmät palauttavat Rakentaja
esine. Tämä antaa mahdollisuuden ketjuttaa rakentajien menetelmiin.
Listaus 2. Yhteenveto luokan menetelmistä Kaavio.Rakentaja
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 [] points) public Builder addPoints (List points) public Builder addLineGraph (Point [] points, int lineGraphColor) public Builder addLineGraph (List points, int lineGraphColor) public Builder addLineGraph (Point [] points) public Builder addLineGraph (List points) 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 (List 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 ()
Huomaa luettelossa 2, että monet menetelmät ovat ylikuormitettuja hyväksymään joko objektijoukot tai objektiluettelot. Annan parempana taulukot luetteloiden sijasta tässä artikkelissa oleviin esimerkkeihin yksinkertaisesti siksi, että taulukoiden alustaminen on paljon helpompaa, mutta KaavioLib
tukee molempia. Java 9 sisältää kuitenkin mukavuustehdasmenetelmät kokoelmille, mikä poistaa tämän pienen matriisien edun. Jos Java 9 olisi ollut laajalti käytössä tämän artikkelin julkaisuhetkellä, olisin pitänyt parempana luetteloita molempien taulukoiden sijaan KaavioLib
ja myöhemmät esimerkit.
Rakentaja-kuvio
Jos haluat lisätietoja Builder-mallista, katso Joshua Blochin Effective Java -mallin toinen painos tai Dustin Marxin JavaWorld-artikkeli "Liian monta parametria Java-menetelmissä, osa 3: Builder-malli".
Android-käyttöliittymäluokkia kutsutaan näkymätja luokka Näytä
pakkauksessa android.view
on käyttöliittymäkomponenttien perusrakenne. Näkymä on ruudun suorakulmainen alue, ja se vastaa piirustuksesta ja tapahtumien käsittelystä. Perinnöllisyyden näkökulmasta luokka Näytä
on esi-isäluokka paitsi käyttöliittymän ohjaimista (painikkeet, tekstikentät jne.), mutta myös asetteluista, jotka ovat näkymättömiä näkymäryhmiä, jotka ovat ensisijaisesti vastuussa alikomponenttiensa järjestämisestä.
Luokka GraphView
pidentää luokkaa Näytä
ja on vastuussa a: hon kapseloitujen tietojen näyttämisestä Kaavio
Android-laitteen näytöllä. Siksi luokka GraphView
missä kaikki piirustus tapahtuu.
GraphLibin käyttäminen
Android-käyttöliittymien luomiseen on kaksi tapaa: menettelytapa (Java-lähdekoodissa) tai deklaratiivinen lähestymistapa (XML-tiedostossa). Kumpi tahansa on pätevä, mutta yksimielisyys on käyttää deklaratiivista lähestymistapaa niin paljon kuin mahdollista. Olen käyttänyt deklaratiivista lähestymistapaa esimerkkeihini.
Ominaisuuden käytössä on viisi perusvaihetta KaavioLib
kirjasto. Ennen kuin aloitat, lataa koottu Java-lähdekoodi GraphLib-kirjastoon.
Vaihe 1. Aseta graphlib.jar saataville Android-projektillesi
Luo uusi projekti Android Studion avulla ja kopioi JAR-tiedosto graphlib.jar
että libs
projektisi alihakemisto sovellus
hakemistoon. Vaihda kansiorakenne Android Studiossa Android että Projekti. Seuraavaksi libs
kansio (sisäkkäin sovellus
kansio), napsauta hiiren kakkospainikkeella JAR-tiedostoa ja napsauta Lisää kirjastona. Tämä viimeinen toiminto lisää JAR-tiedoston sovelluksesi riippuvuusosioon build.gradle
tiedosto. Katso "Kuinka lisätä purkki ulkoisiin kirjastoihin Android Studiossa", jos tarvitset apua tässä vaiheessa.
Vaihe 2. Luo Android-toiminto, joka käyttää GraphLibiä
Android-sovelluksissa toiminta edustaa yhtä näyttöä, jossa on käyttöliittymä. Aktiviteetit määritellään ensisijaisesti kahdessa tiedostossa: XML-tiedosto, joka ilmoittaa käyttöliittymän asettelun ja komponentit, ja Java-tiedosto, joka määrittelee ajonaikaiset toiminnot, kuten tapahtumien käsittely. Kun uusi projekti luodaan, Android Studio luo yleensä oletusaktiviteetin nimeltä Pääaktiviteetti
. Käytä tätä toimintaa tai luo uusi sovelluksellesi.
Vaihe 3. Lisää GraphView toiminnan asetteluun
Ilmoitat toiminnan asettelun XML-tiedostossa a GraphView
esine samalla tavalla kuin ilmoitat painikkeen tai tekstinäkymän, paitsi että sinun on annettava koko paketin nimi GraphView
. Luettelossa 3 näkyy ote asettelutiedostosta, joka ilmoittaa a GraphView
jota seuraa a Tekstinäkymä
osana pystysuoraa lineaarista asettelua. Noudattamalla suositeltua käytäntöä, leveyden ja korkeuden todelliset arvot GraphView
määritellään erikseen dimen
resurssitiedostot, joissa eri resurssitiedostot tarjoavat arvoja eri näytön kooille / tiheydelle. (Huomaa: Käytin 325: tä molempiin arvoihin alla olevissa esimerkeissä.)
Listaus 3. GraphView- ja TextView-ilmoitusten asettelu XML-tiedostossa
Vaihe 4. Tuo kirjastoluokat aktiviteettiin
Listaus 4 näyttää luettelon sovelluksen tuontilausekkeista, jos kirjastoluokkia tuodaan erikseen. Tuontiluettelo voidaan lyhentää yhdelle riville muodossa tuo com.softmoore.android.graphlib. *
haluttaessa. Henkilökohtaisesti haluan nähdä laajennetun luettelon luettelon 4 mukaisesti.
Listaus 4. Tuo kirjastoluokat
tuo com.softmoore.android.graphlib.Function; tuo com.softmoore.android.graphlib.Graph; tuo com.softmoore.android.graphlib.GraphView; tuo com.softmoore.android.graphlib.Label; tuo com.softmoore.android.graphlib.Point;
Vaihe 5. Luo Graph-objekti ja lisää se GraphView-näkymään
Listaus 5 näyttää yksinkertaisen kaavioobjektin luomisen - tässä tapauksessa kaavioobjektin, joka käyttää kaikkia oletusarvoja. Se sisältää olennaisesti vain joukon x- ja y-aksit, joissa molempien akselien arvot vaihtelevat välillä 0-10. Luettelossa asetetaan myös otsikko näytölle ja teksti kaavion alla olevalle tekstinäkymälle.
Luettelointi 5. Luo Graph-objekti ja lisää se GraphView-näkymään
Kaaviokaavio = new Graph.Builder () .build (); GraphView graphView = findViewById (R.id.graph_view); graphView.setGraph (kaavio); setTitle ("Tyhjä kaavio"); TextView textView = findViewById (R.id.graph_view_label); textView.setText ("Kaavio akseleista");
Kuvassa 2 on esitetty tämän sovelluksen suorittamisen tulos Android-laitteella.
John I.MooreGraphLibin käyttö Android-sovelluksissa
Artikkelin loppuosassa keskityn GraphLib-kirjaston reaalimaailman käyttöön Android-sovelluskehityksessä. Esitän seitsemän esimerkkiä, joissa on lyhyet kuvaukset ja lähdekoodi-otteet. Huomaa, että näiden esimerkkien Java-koodiluettelot keskittyvät käyttämiseen Kaavio.Rakentaja
luoda sopiva Kaavio
esine. Puhelut findViewById ()
, setGraph ()
, setTitle ()
jne., ovat samanlaisia kuin luettelossa 5 esitetyt ja eivät sisälly koodiluetteloihin.