Cerca con Google

Translate

22 giugno 2011

Tutorial 15 - Creare pulsanti (Button) con grafica accattivante


Vediamo oggi come è possibile, con un piccolo sforzo di programmazione in più, utilizzare nelle nostre App dei pulsanti (Button) che abbiano un aspetto grafico diverso da quello di default di App Inventor.

Come ormai saprete infatti, i pulsanti "base" di App Inventor (quelli che trasciniamo nel nostro progetto dalla palette basic) sono si utilissimi e molto facili da utilizzare, ma peccano dal punto di vista visivo, in quanto sono tutti uguali ed aimè poco accattivanti...
Ecco un esempio di come si presentano i pulsanti di default sul mio DHD:

Esempio dei pulsanti di default offerti da App Inventor

Mentre, utilizzando la property "image" del componente button, potremmo realizzare un qualcosa dal look più moderno e fantasioso:

Esempio di pulsanti realizzati con buttongenerator.com
Ovviamente la scelta sta a voi, in base al tipo di app che volete creare ed al tempo che le volete dedicare, decidere quali dei due metodi utilizzare.

In un prossimo tutorial vedremo anche un terzo metodo, che utilizza gli sprites come pulsanti, per aggirare le problematiche di posizionamento e allineamento dei pulsanti in App Inventor.

Come sempre, buona visione!


Per la creazione dei vostri pulsanti suggerisco questi due ottimi siti gratuiti:

http://www.buttongenerator.com/
http://www.mycoolbutton.com/3d-free-button-generator.php

ovviamente ne esistono molti altri, a voi il piacere della scoperta!

Il file sorgente del progetto utilizzato lo trovate cliccando qua

33 commenti:

  1. Complimenti anche per questo video, con questi bottoni si riescono a creare delle app veramente carine, ti chiedo una cosa, ho visto che sulla tua app dell Ristorante ci sono anche i menu, credo che siano delle immagini come sei riuscito a gestire la dimensione per visualizzarla in una pagina e avere delle scritte cosi nitide ? io ho provato con un file jpg ma mi si sfuoca la scitta.
    Grazi mille.

    RispondiElimina
  2. Ciao, il "trucco" è quello di usare una risoluzione il più vicino possibile a quella del tuo device, nell'esempio dell'app del ristorante ho usato immagini alla dimensione 480x636 (sarebbe 480x800 - l'altezza del banner che c'è in tutte le pagine)
    se non hanno la corretta dimensione, come hai giustamente notato, sgranano parecchio...
    sperimenta partendo da 480x800 come base!

    RispondiElimina
  3. Ciao, complimenti di nuovo, ogni video idee nuove, volevo però chiederti una cosa. Ho un HorizontalArrangement con tre button, di default app inventor mi mette l'horizontalArrangement in alto, è possibile metterlo in basso?
    Grazie

    RispondiElimina
    Risposte
    1. Purtroppo ai non supporta ancora quello che in android si chiama gravity,quindi non è possibile farlo
      Puoi inserire un vertical arrangment a fill parent e poi sotto l'horizontal ed otterrai un qualcosa di simile anche se non è la soluzione ideale...

      Elimina
  4. Ciao Seba,
    ho scoperto appinventor tramite i tuoi numerosi tutorial,
    ti faccio i complimenti per la chiarezza e perche' rendi molto semplice l uso che proprio semplice non e' hihihihih
    Ho seguito quasi tutti i tuoi tutorial, e mi e' venuta voglia di farmi un app banalissima, ma mi sono gia bloccato ihihih
    tieniti forte , sto per chiederti di mandare un uomo su marte con la mia app! hihihi scherzo,
    In pratica voglio associare ad un button, un link, in poche parole, clikkando sul tasto mi si deve aprire una pagina youtube per esempio.
    nello screen1 inserisco il tasto e il componente web, poi apro la pagina a blocchi e monto:
    quando clik sul tasto, set web1 url, tex (http:// .....)
    salvo, apro l emulatore,lo connetto, provo , ma non succede niente,
    Potresti aiutarmi a risolvere quest inghippo?
    Ti faccio di nuovo i complimenti ,seguo il tuo blog in attesa di altri tutorial per imparare qualcosa di piu,
    grazie in anticipo,
    Ciao ;-)

    RispondiElimina
    Risposte
    1. Ciao Fausto! son contento che ti piacciano i miei tutorial!
      hai ancora un pò di "confusione", devi usare un activitystarter e non il componente Web (activitystarter serve per lanciare applicazioni esterne come appunto il browser o youtube mentre il componente web "legge" e riceve dati da siti web)

      Il suo uso è semplice, segui queste istruzioni (eventualmente sul tutorial google maps alla fine quando parlo di streetview trovi spiegato lo stesso concetto...)

      -aggiungi un componente ActivityStarter
      -nelle sue proprietà metti (per aprire il browser):
      Action: android.intent.action.VIEW
      DataUri: http://www.youtube.com

      a questo punto al click del pulsante assegni l'azione startactivity

      Se vuoi fare altro in genere si cambiano i parametri dell'activitystarter, per esempio per youtube:

      Action: android.intent.action.VIEW
      ActivityPackage: com.google.android.youtube
      ActivityClass: com.google.android.youtube.PlayerActivity
      DataUri: http://www.youtube.com/watch?v=8ADwPLSFeY8

      dove la parte dopo la v= è il "codice" del video di youtube che vuoi vedere,
      spero di essere stato abbastanza chiaro!

      Elimina
    2. Ciao nell'esempio che fai cambiando i paramentri di activitystarter a me mi dà un errore!!
      Posso chiederti alcune cose?
      1)è possibile far partire subito il video senza doverci cliccare sopra?
      2) è possibile associare una presentazione di foto ad un pulsante!
      Vorrei far partire questa slide di foto premendo un pulsante http://snack.to/pz15gf08 come faccio? se è possibile utilizzare a schermo intero http://files.photosnack.net/app/swf/EmbedCanvas.swf?hash_id=pz15gf08&t=1341149052

      Grazie!

      Elimina
    3. Ciao Fabio, hai due strade percorribili
      1 - usa una webview, crei un pulsante (o più di uno a seconda di come vuoi impostare l'app) ed una webview
      alla pressione del pulsante carichi l'url nella webview e carichi la pagina internet
      2 - usi un activitystarter, in questo modo partirà il browser di default del tuo telefono all'url specificato in design editor
      puoi far partire in automatico la cosa legando il caricamento della webview a screen1.initialize per esempio
      per lo schermo intero ti conviene trovare un servizio web che faccia già uno slideshow a schermo intero, magari anche photosnack lo fa ma non sono pratico
      in bocca al lupo...:)

      Elimina
  5. ritornando in tema con questo tutorial, ci sarebbe un modo per far cambiar colore ai button immagine se pigiati?

    RispondiElimina
    Risposte
    1. certo, su evento button.click imposti l'azione set button.backgroundcolor to , al colore che vuoi te...
      con button.textcolor cambi il colore del testo volendo...

      Elimina
    2. se invece parliamo di pulsanti creati con una backgroundimage, allora all'evento click dobbiamo far cambiare l'immagine con un'altra che abbia l'effetto del bottone pigiato.
      Ogni pulsante dovrà avere due immagini, una nello stato normale una in quello pigiato...

      Elimina
  6. si, si, mi riferivo alla seconda soluzione, due immagini per pulsante, il problema è dove mettere la seconda immagine.
    Anche con un'altra app ho lo stesso problema anche se con scopi diversi.
    Come fare in modo tale che all'installazione dell'app si crei in automatico una cartella nella sdcard contenente delle immagini?
    tinyDB per effettuare l'operazione solo la prima volta e poi?

    RispondiElimina
    Risposte
    1. la seconda immagine la carichi come media da design editor, non c'è bisogno di usarla subito ma sarà a disposizione della tua app quando ne avrai necessità.
      supponiamo che carichi due immagini
      button1_normal e button1_pushed
      poi da blocks editor all'evento click cambi l'immagine del button1 in button1_pushed (meglio ancora usare un clock che dopo diciamo 0,5s riporta l'immagine a button1_normal in modo da simulare graficamente il comportamento dei pulsanti di default)se hai problemi scrivimi per mail e vedo di aiutarti,ciao

      Elimina
  7. sto ricreando un'app telefono con delle particolarità, avrei bisogno di due immagini per ogni tasto, sinceramente non ho capito come caricare delle immagini invisibili da richiamare sul tasto, l'unica soluzione che ho trovato è crearmi a priori una cartella di tali immagini sulla sdcard, sono fuori strada?
    Graziee

    RispondiElimina
  8. ok ok Media in basso a destra, mi ero fissato con Media in alto a sinistra in Palette subito dopo Basic.
    Grazieeeee

    RispondiElimina
    Risposte
    1. esatto! ci eravamo capiti male! ottimo che hai risolto! ciao

      Elimina
  9. ciao, non so se è il caso di iniziare a studiare un po' di codice (ho basi di pascal e basic anno '80, stavo ricostruendo un telefono ma è possibile che devo fare un "When button click" per ogni tasto? Ogni tasto X1..Xn deve vibrare se pigiato e cambiare immagine per 0,3sec in XX1..XXn oltre, ovviamente a scrivere 1..n nell'apposita casella.
    Possibile che non ci sia una soluzione globale e debba programmare un tasto alla volta? Purtroppo il "When Anybutton click" non esiste.
    Con il codice si poteva ovviare? (E' solo una curiosità al momento).
    Graziee.

    RispondiElimina
    Risposte
    1. Con il codice si hanno a disposizione molti più' template e anche la possibilità' di avere immagini diverse per pulsante on/off purtroppo con ai questo non s' possibile e bisogna fare come hai detto te!se hai molti pulsanti la cosa diventa lunga e faticosa...

      Elimina
  10. ciao, mi trovo alle prime armi e sto cercando di realizzare (grazie alle tue guide) un'applicazione per una radio in stream. Sono riuscito a caricare un'immagine che rappresenta bottone di play che una volta premuto attiva lo stream e commuta l'immagine in quella di stop. Ora dovrei fare il contrario, cioè cliccando su stop interrompere lo stream e commutare nuovamente su play. E qui sto in alto mare :)

    Grazie per il tuo aiuto

    Giuseppe

    RispondiElimina
  11. Ciao Seba una domanda sui bottoni: ho fatto un'app dove c'è uno screen iniziale con due bottoni. Lo screen e scrollabile e quando scrollo, i bottoni mi spariscono giustamente. C'è una possibilità di mantenerli fermi nella posizione mentre la pagina scrolla?
    Grazie
    Angelo V.

    RispondiElimina
    Risposte
    1. Ciao Angelo,non credo sia possibile, mettendo a scrollable lo schermo in pratica hai uno schermo di altezza "illimitata" i bottoni sono posizionati a delle coordinate y che restano fisse rispetto alla parte superiore dello schermo, potresti provare cambiandoci la posizione man mano che l'utente trascina verso il basso lo schermo ma onestamente non so con quale componente potresti leggere la posizione attuale dello schermo, se mi viene qualche idea ti faccio sapere ciao

      Elimina
  12. Ciao Sebastiano e complimenti per i tutorial.i questo tutorial non ho capito bene a cosa serve la definizione opzione scelta.potresti spiegarmelo?non ho ben chiaro il concetto di definizione in app inventor.

    RispondiElimina
  13. Volevo dire di definizione variabile, non ho ben capito a cosa servono le variabilj e come si usano.

    RispondiElimina
    Risposte
    1. il concetto di "variabile" è comune a tutti i linguaggi di programmazione, App Inventor non fa eccezione, ti consiglio di leggere la definizione di wikipedia ad esempio
      http://it.wikipedia.org/wiki/Variabile_(informatica)
      a grandi linee comunque è un elemento del programma che può assumere un valore preciso e viene utilizzato all'interno della logica del programma per ottenere un risultato.
      Ad esempio se imposti la variabile "punteggio" in un gioco, questa all'inizio magari ha valore 0, poi man mano che il giocatore realizza i punti, il programma incrementa questa variabile per contenere appunto il valore del punteggio corrente del gioco.
      Spero di averti un pò chiarito le idee :)

      Elimina
  14. grazie mille!mi hai chiarito le idee! :):)

    RispondiElimina
  15. Ciao Seba,da poco ho trovato casualmente i tuoi tutorial su youtube...devo dire che sei un grande,sopratutto per come mandi avanti i tuoi progetti.
    Vorrei chiederti se dopo aver creato i due pulsanti,posso inserire una WebView. Mi spiego meglio: clicco su pulsante 1,voglio che nella stessa pagina,si apra sotto nella WebView la pagina contenente la webcam della mia città. Vorrei sapere se si può fare e come?? Scusami se chiedo un pò troppooo

    RispondiElimina
    Risposte
    1. Certo che si può fare, è molto semplice basta che alla pressione del pulsante programmi il caricamento della pagina con l'url della webcam nella webviewer.
      Imposti il valore della webviewer url e poi dai la gotourl.
      Ti consiglio di guardare il tutorial sull'utilizzo della webviewer che trovi in elenco tutorial, così sarà ancora più chiaro, ciao

      Elimina
  16. Ciao, sto creando una app (con ai2) che tramite dei pulsanti (avanti/dietro) mi scorre delle date. Esiste in ai classic o ai2 un controllo che permette di evitare l' uso dei pulsanti, strisciando verso sinistra o destra con il dito sullo schermo, come normalmente si fa usando un tablet o smartphone?
    Non mi sembra di aver trovato nulla a riguardo.
    Grazie,
    Francesco

    RispondiElimina
    Risposte
    1. Ho trovato uno stratagemma. Ho inserito nella zona inferiore dello schermo un canvas e con l'evento DRAGGED vado a verificare i valori della x iniziale (coord. X del "primo" tocco) e x finale (coord. X dell'ultimo tocco, cioè quello appena prima a quando il dito lascia lo schermo).
      Se la x iniziale > della x finale allora la direzione del dito è verso sinistra; altrimenti la direzione del dito è verso destra

      Elimina
    2. Grazie Francesco, ottimo suggerimento!
      l'unico "problema" è che con i canvas bisogna lavorare di più per ridimensionarli alle differenti risoluzioni dello schermo dei vari smartphone tablet, cmq è una buona idea e può "simulare" bene lo slide per il cambio di schermata, se hai voglia potresti postare i blocchi che hai usato nel forum (crea una discussione apposita) :) penso che molti utenti te ne sarebbero grati!

      Elimina
    3. OK, già fatto. Ho però postato un metodo diverso, usando l'evento FLUNG, perchè mi è sembrato più funzionale.

      Elimina
  17. Ciao Seba, è possibile cambiare anche la grafica dello slider? Se sì come?
    Grazie! Sei bravissimo e gentilissimo!

    RispondiElimina
  18. Salve,
    ottimo tutorial,in una app ho bisogno di creare circa 100 button .
    Esiste un copia incolla o devo crearli manualmente uno per uno???

    RispondiElimina