Nel
precedente articolo ci siamo occupati di come gestire l'orientamento dello schermo; qui ci occuperemo di gestire le animazioni su iPhone, che sono utilizzate anche per le transazioni tra una pagina e un'altra. Inoltre introdurremo una soluzione di implementazione di una semplice lista non numerata, che completeremo nel prossimo articolo.
Per risolvere il problema delle
animazioni, ci serviamo delle specifiche di
CSS 3, che sono già ampiamente
implementate all'interno di
WebKit, motore di rendering su cui si poggia
Safari.
Per poterle utilizzare nelle nostre applicazioni
GWT dobbiamo completare i
seguenti task: impostare il contenuto di un elemento; impostare sull'elemento una classe
CSS che disabilita le animazioni; impostare l'elemento stesso con un'altra classe
CSS, che lo porrà sulla posizione iniziale, quella che avrà nell'ambito dell'animazione da eseguire. Quindi bisognerà istanziare un
DeferredCommand, che provvederà a rimuovere le classi
CSS impostate precedentemente e abilitare la classe
CSS, che svolge l'animazione.
Infine si deve impostare sull'elemento stesso un'ulteriore classe
CSS, che metterà l'elemento nella posizione in cui esso stesso si manterrà dopo la fine dell'animazione. Una volta che l'animazione è finita, utilizzando un
transitionend event, si disabilitano le classi, che rendono possibile l'animazione sull'elemento, sostituendole con quelle indicate nei punti precedenti, per far tornare l'elemento al punto di partenza.
Con
GWT è possibile creare qualsiasi tipo di elemento con il
tag <body>. Però di default possiamo utilizzare solo un set di widget, che non ci implementano tutti i tag a noi necessari, come ad esempio
<li> e
<ul>; per cui dobbiamo scrivere delle classi
ad hoc, che implementino in qualche modo tali tag.
Per realizzare, ad esempio una lista non numerata possiamo costruirci due classi: una che implementa un singolo elemento di tale lista, e un'altra che contiene tutte le istanze della prima. Di seguito riportiamo il codice della classe ,che implementa il container di elementi di una lista.
...
public class GenericContainerTag extends ComplexPanel { public GenericContainerTag(String tagName) { setElement(DOM.createElement(tagName));
}
@Override
public void add(Widget w) { add(w, getElement());
}
public void insert(Widget w, int beforeIndex) { insert(w, getElement(), beforeIndex, true);
}
}
Per poter utilizzare questo oggetto nel nostro codice e creare un tag
<ul> non dovremo fare altro che eseguire la chiamata:
GenericContainerTag ul = new GenericContainerTag("ul");