Utforme en Panoramio Thumbnail Viewer i Flex

Design en Panoramio Thumbnail Viewer i Flex
Del
Del
Del
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

I denne opplæringen vil jeg ta deg gjennom de måtene som Flex Tilpasser grensesnittkontroller. Spesielt vil vi se på TileList element, styling det med Flex sin GUI toolkit.

For å trekke dette alle sammen, vi vil gjøre bruk av Panoramio API og bygge en dynamisk miniatyrbildevisningen.



Quick Preview

Her er oversikt betrakteren vi jobber mot:

Innledning

Siden begynnelsen av grafisk drifts systemer har det vært en håndfull av standard brukergrensesnitt kontroller som knapper, etiketter, tekstbokser og lister kombinasjonsbokser. Disse kontrollene har tjent jobben sin godt, men mens Vista, Windows 7, MacOS, KDE og Gnome bringe oss friske nye visuelle design, er utviklere ganske ofte stakk designe sine egne applikasjoner med kontroller som ikke har endret sin grunnleggende funksjon i 20 år .

Det spiller ingen rolle om du gjør en web-side, programmerer et Windows-program med VB.Net eller lage en RIA med Flex; når du kommer ned til det en liste er fortsatt en liste, og en knapp er fortsatt en knapp.

Heldigvis Flex tilbyr utviklere en praktisk måte å tilpasse ydmyke listen, noe som åpner for mye mer spennende design enn de vanlige linjene av teksten. Vi vil bruke denne funksjonaliteten til å skape en Panoramio bildeviser

Trinn 1:. Opprett et nytt Flex Prosjekt

Opprett en ny Flex prosjekt. Fordi vi vil trekke bildene fra Panoramio (som returnerer en JSON objekt) trenger vi å referere til AS3CoreLib bibliotek (som kan konvertere JSON tekst til en Action objekt), som du kan laste ned herfra. Pakk ut arkivet og deretter legge en referanse til det i "Flex Bygg Path"

Trinn 2:. Definer States

I motsetning til desktop-applikasjoner, kan Flex applikasjoner bare har ett vindu. States brukes til å enkelt endre kontrollene på skjermen når mer enn én skjerm, som en miniatyrvisning og en detaljvisning, er nødvendig.

Nye stater kan legges ved hjelp av "Den nye staten" -knappen i USA verktøykasse.

Vi ønsker å legge til to stater. Den første vil bli kalt "Thumbnails". Klikk på "New State" knappen og fylle ut dialogen som skjermbildet nedenfor. Legg merke til at vi tick "Sett som startside staten", som forteller Flex at dette er staten som skal først vises.

Vi trenger også en tilstand som kalles "detaljer". Igjen, klikker du på "New State" knappen og fylle ut dialogen som skjermbildet under

Trinn 3:.. Design Thumbnail State

Velg "Thumbnails" state fra USA verktøykasse

Nå kan du tegne en ny TileList komponent på GUI. Denne komponenten vil bli brukt til å vise miniatyrbilder.

Tilordne TileList en ID "thumbnails" og sette "Data Provider" til {bilder}. Flex kan du skrive Actionscript-kode innen MXML element attributter ved å kapsle inn koden i klammeparentes, og vi bruker den funksjonaliteten her for å sette bildene samlingen (som vi vil skape senere) som kilde til dataene for TileList.

Trinn 4:. Design Detail State

Velg "Detail" state fra USA toolbox

Paint en bildekontroll, med en id av "bilde", som tar opp mest av plass på skjermen. Deretter ned på bunnen legge to etiketter, med ID-ene for "photoTitle" og "photoLocation", og en knapp med en merkelapp med "Back".

Vi trenger også å sette "On klikk" eiendom av Button til {this.currentState = 'Thumbnails'}. Endre verdien tilordnet "currentState" eiendom er hvordan vi endrer mellom stater i Flex, og akkurat som med "Data Provider" eiendom av TileList i trinn 3, legge vi noen Actionscript-kode i egenskap ved å kapsle den i klammeparentes . Ved å tildele strengen "Thumbnails" til "currentState" eiendom, er vi instruere Flex å slippe tilbake til miniatyr staten.

Din siste grensesnitt for detalj staten bør se ut skjermbildet nedenfor.
< h2> Trinn 5: Opprette en ny MXML Component

MXML komponenter kan brukes til å definere hvordan enkelte fliser vises i TileList komponent. Klikk Fil > New > MXML Component.

Du vil nå se en dialogboks som lar deg spesifisere detaljene for MXML Component. Fyll det ut som skjermbildet under

Når du er ferdig vil du bli ført til et designpanel hvor du kan male komponenter akkurat som du ville gjort med hoved Flex-program

Trinn 6..: Tile Layout

Dette MXML Component vil bli brukt til å vise enkeltbilder innenfor TileList. Som du ser har du nesten ubegrenset frihet i hvordan flisene er utformet. Hver flis kan være utformet med noen Flex kontroll i enhver oppsettet du vil.

frihet til å utforme hver flis individuelt er det som gjør TileList, og andre kontroller som "Datagrid", "HorizontalList", "List", "Meny" og "Tree" så kraftig. Faktisk har jeg aldri sett noen andre GUI toolkit gi utviklere dette nivået av tilpasning uten å måtte utvikle en ny kontroll fra grunnen

For vår søknad vil vi vise to komponenter på hver flis:. Et bilde og en Merkelapp. Den endelige utformingen skal se omtrent slik skjermbildet nedenfor

Trinn 7:. Etikett

Sett Tekst eiendom for etiketten til {data.photo_title.length > 30? data.photo_title.substr (0, 27) + '...': data.photo_title}. Her viser vi "photo_title" eiendom av objektet som er bundet til komponenten (vi vil se hvordan denne bindingen er gjort senere) med en trefoldig operatør (i utgangspunktet en forkortelse if..else statement).

Hvis det er 30 tegn eller mindre full strengen skal vises. Ellers viser vi de første 27 tegnene etterfulgt av 3 perioder for å indikere at tittelen har blitt forkortet

Trinn 8:. Bilde

Sett "Source" eiendom på bildet for å {data.photo_file_url }. Igjen vi bruker Action å trekke ut "photo_file_url" eiendom av objektet som er bundet til komponenten

Trinn 9:. Manuelt angi MXML attributter

Gå tilbake til hoved MXML filen og slå redaktøren til Kilden visning.

Du skal se en statene element lagt til Application element. Dette er markering som representerer statene vi definerte i trinn 2.

Under statene element det bør være to statlige elementer, og under hver av dem vil det bli AddChild elementer. Disse er knyttet til de komponentene som er lagt til hver stat.

Under State element med "navn" "Thumbnails" bør du se en AddChild element som inneholder en TileList element. Dette er TileList at vi har lagt i trinn 3. Vi er nødt til å legge til noen ekstra attributter nedenfor for at TileList å vise vår skikk MXML Component.
ItemRenderer = "ImageThumbnail" itemDoubleClick = "photoSelected ()" doubleClickEnabled = "true"

Så hele TileList element skal lyde:
< mx: TileList itemRenderer = "ImageThumbnail" itemDoubleClick = "photoSelected ()" doubleClickEnabled = "true" dataprovider = "{bilder}" id = "miniatyrbilder" bottom = "0" top = "0" igjen = "0" rett = "0" />

"itemRenderer" attributt er navnet på MXML Component vi opprettet i trinn 5.

"itemDoubleClick" attributt setter "photoSelected" -funksjonen til å bli kalt når en vare er dobbelt-klikket.

"doubleClickEnabled" attributtet forteller komponent for å behandle to museklikk som en enkelt dobbeltklikk . Uten dette attributtet komponenten ville behandle et dobbeltklikk som to enkeltklikk, og "itemDoubleClick" hendelse ville aldri bli utløst

Trinn 10:. Legg en stat Transition Effect

Flex lar deg bruke en effekt når overgangen mellom en stat og den neste. Vi vil bruke denne funksjonaliteten til utgangspunktet dimme skjermen når du skifter mellom Miniatyr og Detaljer tilstander, så bringe skjermen tilbake i fokus.

For å definere tilstanden transistion vi må legge til en "overganger" element som et barn av MXML "Søknad" element
< mx:.! overganger > < - Individuelle overganger gå her - > < /MX: overganger >

Inne i overganger element vil vi legge til en overgang element.
< mx: Transition fromState = "*" tostate = "*" > < - Overgangseffekter gå her - > < /mx: Transition >

"fromState" og "tostate "attributter definerer statene som overgangen vil gjelde. Her har vi brukt stjernen som wildcard, som matcher alle stater, noe som betyr at overgangen effekten vil bli brukt når du flytter fra noen gamle stat til noen nye staten.

Inne i Transition element vi definerer effekten istelf .
< mx: Blur target = "{denne}" varighet = "500" blurYFrom = "20,0" blurYTo = "1.0" blurXFrom = "20,0" blurXTo = "1.0" />

"target "attributtet definerer hvilken komponent (og sine barn) vil ha blur effekt påføres. I dette tilfellet ønsker vi alle elementene for å bli uskarpt, så vi satt målet å peke på "dette".

"varighet" attributtet definerer hvor lenge å bruke blur effekt for i millisekunder. Vi har brukt 500 her, som er et halvt sekund.

De "blurYFrom" og "blurXFrom" attributter definere hvordan uklare effekten vil vises i utgangspunktet. Større verdier her foreta den første effekten mer uskarpt.

De "blurYTo" og "blurXTo" attributter definere hvordan uklare effekten vil være på slutten av varigheten. Vi ønsker å bringe skjermen tilbake i skarpt fokus, så vi tilordner verdier av en til hver av de attributtene

Trinn 11:. Hente Bildene fra Panoramio

På dette punktet vi har definert vår brukergrensesnitt. Nå må vi få noen bilder å vise

Legg følgende attributt til Application element.
ApplicationComplete = "appComplete ()"

Dette setter "appComplete" -funksjonen til å bli kalt når Søknaden har initialisert.

Legg en "Script" element til MXML Application element. Dette gir oss et sted å skrive Actionscript-kode
< mx:.! Script > < [CDATA [//Kode går her]] > < /mx: Script >

I Script element import følgende pakker
import mx.collections.ArrayCollection, importere mx.controls.Alert, importere com.adobe.serialization.json.JSON;
Trinn 12:. Cross domenepolicy

Som standard Flex vil ikke tillate deg å laste ressurser fra et eksternt domene. Imidlertid kan denne oppførselen overstyres hvis fjern domenet har et kors domenesikkerhetspolitikk filen (vanligvis crossdomain.XML). Heldigvis Panoramio har nettopp en slik politikk fil, som vi laster med følgende kode:
Security.loadPolicyFile ("http://www.panoramio.com/crossdomain.xml");

I trinn tre satt vi "Data Provider" eiendom av TileList til en samling som heter "bilder". Det er her vi faktisk definerer at samlingen. . Ved å bruke "bind" tag på variabelen vi forteller Flex å se etter eventuelle endringer i samlingen, og for å vise disse endringene automatisk
[bind] private Var bilder: ArrayCollection = null;
Trinn 13: appComplete Funksjon

Legg til en funksjon som heter "appComplete"
privat funksjon appComplete (). void {var panoramioURL: String = "http://www.panoramio.com/map/get_panoramas.php?order=popularity&set=public&from=0&to=50&minx=-180&miny=-90&maxx=180&maxy=90&size=medium"; Var forespørsel: URLRequest = new URLRequest (panoramioURL); Var loader: URLLoader = new URLLoader (forespørsel); loader.addEventListener (Event.COMPLETE, loaderComplete); loader.addEventListener (IOErrorEvent.IO_ERROR, funksjon (hendelse: Hendelse): void {Alert.show ("Det var en IO feil kontakter Panoramio");}); loader.addEventListener (SecurityErrorEvent.SECURITY_ERROR, funksjon (hendelse: Hendelse): void {Alert.show ("Det var en sikkerhetsfeil kontakter Panoramio");}); }

Å få bilder fra Panoramio er faktisk veldig enkelt. I motsetning til andre image-bare nettsteder som Flickr, betyr Panoramio krever utbygger å få en API eller eller for å bruke en spesiell API. Du bare gjøre en HTTP-forespørsel til en spesielt formatert URL (Panoramio API side har alle detaljene) og bruke den returnerte JSON å få tilgang til bildene.

I Flex dette betyr å skape en "URLRequest" objekt med Panoramio URL, deretter opprette en ny "URLLoader", forbifarten at forespørsel i konstruktøren. Vi trenger å se etter 3 hendelser fra URLLoader: Event.COMPLETE, IOErrorEvent.IO_ERROR og SecurityErrorEvent.SECURITY_ERROR.

Event.COMPLETE hendelsen viser at alt gikk bra, og at Panoramio serveren har returnert den informasjonen vi trenger. I dette tilfelle kaller vi "loaderComplete" -funksjon.

Den IOErrorEvent.IO_ERROR og SecurityErrorEvent.SECURITY_ERROR hendelser tyder på at noe gikk galt. I så fall varsle vi brukeren om at vi ikke kunne kontakte Panoramio server og ikke gå lenger

Trinn 14:. LoaderComplete Funksjon

Nå kan du legge en ny funksjon kalt "loaderComplete".
privat funksjon loaderComplete (hendelse: Hendelse): void {var svaret: URLLoader = URLLoader (event.target); Var responseData: Object = JSON.decode (response.data); this.images = new ArrayCollection (); for hver (var bilde: Object i responseData.photos) {this.images.addItem (image); }}

Her tar vi JSON returnert av Panoramio og konvertere den til en Action objekt med AS3CoreLib biblioteket fra trinn 1.

Ett av triksene når du arbeider med web-tjenester i å vite hvilke data som faktisk har vært faktisk tilbake. Hvis du bruker Firefox er det en stor add-on som heter JSONovich som vil formatere JSON kode i nettleseren. I skjermbildet nedenfor kan du se formatert JSON som ble returnert fra Panoramio webtjeneste. Legg merke til at JSON objekt har en egenskap kalt "teller" og en rekke kalt "bilder" som inneholder objektene som igjen inneholder detaljer om de enkelte bildene.

Så, hva vi trenger å gjøre er å ta hver av objektene i denne bilder matrise og plassere dem i våre bilder samlingen. Dette er bare et spørsmål om looping gjennom hvert av objektene i bildene innsamling og deretter ringer "AddItem" på bildene samlingen.

Fordi bildene samling hadde "bind" tag, og legger disse objektene i samlingen vil føre dem til å bli vist. Hvis du ser tilbake til trinn 5 vil du legge merke til at verdiene for Label og Image ble satt til eiendommer fra et objekt som heter "data". Dette dataobjekt faktisk refererer et element i bildene samlingen, og hvis du ser på skjermbildet ovenfor kan du se hvor photo_file_url og photo_title egenskaper kom fra

Trinn 15:. PhotoSelected Funksjon

. endelige funksjonen kalles "photoSelected"
privat funksjon photoSelected (): void {this.currentState = "Detail"; Var selectedPhoto: Object = this.thumbnails.selectedItem; this.photo.source = selectedPhoto.photo_file_url; this.photoTitle.text = selectedPhoto.photo_title; this.photoLocation.text = "Lat:" + selectedPhoto.latitude + "Long:" + selectedPhoto.longitude;}

Denne funksjonen kalles når brukeren dobbeltklikker på et element i TileList. Her setter vi den nåværende tilstanden til "detaljer", og angi egenskapene for bildet og etiketter ved hjelp av egenskapene til den valgte TileList elementet.

Konklusjon

Vi har bare riper i overflaten av hva som er mulig med MXML Components, men forhåpentligvis kan du se sitt potensial. Å kunne tilpasse hvordan en flis er trukket, uten å måtte skrive kode, er bare ett av de mange funksjonene som setter Flex fra andre utviklingsplattformer. Anmeldelser



Previous:
Next Page: