Kun työskentelemme Android-sovelluksen kehityksessä, erityisesti käyttöliittymän suunnittelussa ja komponenttien luomisessa, yksi keskeisistä haasteista on oppia, miten resurssit ja näkymät hallitaan tehokkaasti ja joustavasti. Tämä luku käsittelee muun muassa resursseja, kuten kuvien käyttöä, ja sitä, miten mukautetut komponentit voidaan luoda ja lisätä koodin avulla suoraan käyttöliittymään.
Yksi tärkeimmistä käsitteistä on resurssien hallinta eri näyttötiheyksille. Androidissa käytetään erilaisia res/drawable -kansioita, jotka vastaavat eri näyttötiheyksiä, kuten ldpi (low dots per inch), mdpi (medium), hdpi (high) ja xhdpi (extra-high). Tämä mahdollistaa sen, että sovellus voi valita optimaalisen kuvan eri laitteille, mikä parantaa käyttökokemusta ja suorituskykyä. Android tarkistaa aina ensin kansiot, jotka vastaavat laitteen näytön tiheyttä, ja lataa sieltä vastaavat resurssit. Jos oikean tiheyden kansio on tyhjä, se etsii seuraavaksi lähimmän vaihtoehdon. Tämä resurssien hallinnan järjestelmä on erityisen hyödyllinen, kun halutaan, että sovellus toimii sujuvasti kaikilla laitteilla, erityisesti niillä, joilla on eri näyttötiheydet.
Jos haluamme käyttää kuvia sovelluksessa, voimme ladata ne ilmaisista kuvapankeista, kuten Pixabay, ja lisätä ne resursseihin. Kuvat voidaan ladata drawable-kansioon, ja XML-määrittelyissä voidaan käyttää näitä kuvia sen sijaan, että käytettäisiin pelkkiä värejä. Tämä yksinkertaistaa grafiikan ja käyttöliittymän ulkoasun hallintaa. On kuitenkin tärkeää huomata, että suuret kuvat voivat vaikuttaa sovelluksen suorituskykyyn, joten optimaalinen kuvan koko ja resoluutio on tärkeää ottaa huomioon, erityisesti mobiililaitteilla.
Kuvien lisäksi Android-sovelluksissa voidaan luoda ja hallita myös näkymiä koodin kautta. Vaikka XML-muotoista käyttöliittymää pidetään suositeltavana, erityisesti monimutkaisemmissa sovelluksissa, on myös mahdollista luoda käyttöliittymä suoraan Java-koodissa. Tällöin voidaan luoda ja lisätä komponentteja, kuten DatePicker, suoraan koodin avulla. Esimerkiksi jos haluamme lisätä DatePicker-näkymän olemassa olevaan käyttöliittymään, voimme tehdä sen seuraavalla tavalla:
Tässä käytetään findViewById-metodia viittaamaan olemassa olevaan asetteluun ja addView()-metodia uuden näkymän lisäämiseksi siihen. Jos taas haluamme luoda koko käyttöliittymän koodilla, voimme luoda uuden RelativeLayout-näkymän ja lisätä siihen tarvittavat komponentit suoraan:
Tällöin käyttöliittymä rakennetaan kokonaan koodissa ilman XML:ää. Tämä lähestymistapa voi olla kätevä yksinkertaisissa sovelluksissa, mutta monimutkaisemmissa tapauksissa XML-pohjainen lähestymistapa on usein selkeämpi ja helpompi ylläpitää.
Androidissa voi myös luoda täysin mukautettuja komponentteja, jotka eivät ole osa Androidin valmiita widgetejä. Tämä tehdään luomalla uusi luokka, joka perii View-luokan. Mukautetut komponentit voivat olla hyödyllisiä silloin, kun halutaan täysin erityinen ja yksilöllinen käyttöliittymäelementti, joka ei vastaa Androidin tarjoamia valmiita komponentteja.
Tässä esimerkissä luomme mukautetun komponentin, joka piirtää tekstiä näytölle. Aluksi luomme uuden luokan CustomView, joka perii View-luokan:
Tässä luodaan Paint-objekti, joka määrittää, miten teksti piirretään, ja onDraw()-metodi piirtää tekstin näytölle. invalidate()-metodia käytetään piirtämisen uudistamiseen.
Tämän jälkeen meidän täytyy vain asettaa tämä mukautettu komponentti käyttöliittymäksi:
Kun sovellus suoritetaan, näemme tämän mukautetun komponentin piirtävän tekstiä näytölle. Tämä lähestymistapa antaa täyden vapauden luoda aivan omia, uniikkeja käyttöliittymäelementtejä.
Androidin tarjoama joustavuus käyttöliittymän rakentamisessa on todella laaja. Vaikka XML-pohjainen lähestymistapa on yleisesti suositeltu, on tärkeää ymmärtää, milloin ja miksi kannattaa käyttää koodilla luotuja näkymiä ja mukautettuja komponentteja. Tämä voi parantaa sovelluksen suorituskykyä, skaalautuvuutta ja erityisesti mahdollistaa täysin yksilöllisten komponenttien luomisen, jotka eivät ole saatavilla valmiina Androidin widgeteissä.
Kuinka luoda Zoom-animaatio mukautetulla siirtymällä
Tässä luvussa käsittelemme, kuinka luoda zoom-efekti Android-sovelluksessa käyttäen animaatiotiedostoja, jotka on luotu suoraan koodissa. Aikaisemmassa reseptissä, joka käsitteli kortin kääntöanimaatiota Fragmenteilla, näytimme siirtymän luomisen animaatiotiedostoilla. Nyt tarkastelemme, kuinka luoda zoom-efekti, jossa pienoiskuva laajenee kosketettaessa suuremmaksi kuvaksi.
Aloita luomalla uusi projekti Android Studiossa ja nimeä se haluamallasi tavalla. Valitse oletusarvoiset puhelin- ja tablettivaihtoehdot ja valitse Empty Activity, kun sinua pyydetään valitsemaan Activity-tyyppi. Voit käyttää tässä reseptissä käytettyä kuvaa, joka on ladattu Pixabay.com-sivustolta, mutta voit käyttää mitä tahansa kuvaa.
Ennen kuin aloitat, varmista, että kuva on kopioitu res/drawable-hakemistoon ja nimeä se image.jpg (jos kuva ei ole JPEG-muodossa, pidä alkuperäinen tiedostopääte).
Toimintatapa:
Avaa activity_main.xml ja korvaa olemassa oleva XML seuraavalla koodilla:
Seuraavaksi avaa MainActivity.java ja määrittele seuraavat globaali-muuttujat:
Lisää loadSampledResource() -metodi, joka on luotu suurten kuvien skaalaamiseen muistin ylitysten välttämiseksi:
Zoom-animaation toteuttaminen:
Lisää koodi onCreate() -metodiin seuraavasti:
Lisää sitten zoomFromThumbnail() -metodi, joka käsittelee itse animaation ja on selitetty tarkemmin seuraavassa osassa:
Kun tämä on valmis, sovellus laajentaa pienoiskuvan kosketettaessa ja näyttää sen suurennettuna. Sovelluksessa on mahdollisuus peruuttaa animaatio, ja pienoiskuva palautetaan alkuperäiseen tilaansa.
Tärkeää ymmärtää:
Zoom-animaatio toimii hyvin vain silloin, kun elementtien koordinaatit ja alkuperäiset mittasuhteet on otettu huolellisesti huomioon. Tässä koodissa käytetyt getGlobalVisibleRect() ja loadSampledResource() -metodit ovat tärkeitä optimoidessasi sovelluksen suorituskykyä ja estäessäsi suurten kuvien aiheuttamat muistivuodot. Lisäksi animaatioiden sujuvuus ja niiden oikea ajoitus vaikuttavat merkittävästi käyttäjäkokemukseen, joten on tärkeää käyttää AnimatorSet- ja ObjectAnimator-luokkia oikealla tavalla.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский