Início > Tutoriais > Deixe sua aplicação BlackBerry API mais rica com Transições Animadas

Deixe sua aplicação BlackBerry API mais rica com Transições Animadas

Boa Tarde!

Hoje iremos conhecer os recursos necessários para aplicar Transições Animadas e deixar nossas aplicações BlackBerry API mais ricas e atraentes. Bons estudos!!!

  • Transições Animadas

A partir da versão 5.0 da JDE do BlackBerry, ou seja, a partir da versão 5.0 do sistema operacional dos smartphones da empresa canadense RIM, o desenvolvedor consegue criar transições animadas entre telas. Isto também era possível nas versões anteriores a 5.0, porém, o desenvolvedor precisaria criar um extenso código para simular um componente deste porte.

O exemplo que vamos criar aqui foi baseado no artigo Creating a Screen Transition. Clique aqui para ver o exemplo original.

O aplicativo muito simples, ele mostra basicamente duas telas, que terão uma transição animada quando ocorrer a troca entre elas.

Veja as figuras abaixo com as duas telas da aplicação:

Veja a listagem de código abaixo:

1: public class TransitionSample extends UiApplication implements FieldChangeListener {

2:    private Screen segundaTela;

3:    private Runnable _popRunnable;

4:

5:    public static void main(String[] args) {

6:        TransitionSample  theApp = new ScreenTransitionSample ();

7:        theApp.enterEventDispatcher();

8:    }

9:

10:   public TransitionSample () {

11:         segundaTela = new FullScreen();

12:         segundaTela.setBackground( BackgroundFactory.createSolidBackground(Color.LIGHTBLUE) );

13:

14:        LabelField labelField = new LabelField(“Esta tela fecha automaticamente depois de 2 segundos.”);

15:        segundaTela.add(labelField);

16:

17:        MainScreen baseScreen = new MainScreen();

18:        baseScreen.setTitle(“Primeira Tela”);

19:

20:        ButtonField buttonField = new ButtonField(“Ver Transição”, ButtonField.CONSUME_CLICK) ;

21:        buttonField.setChangeListener(this);

22:        baseScreen.add(buttonField);

23:

24:        pushScreen(baseScreen);

25:

26:        _popRunnable = new Runnable() {

27:           public void run() {

28:                popScreen(segundaTela);

29:            }

30:        };

31:    }

32:

33:    public void fieldChanged(Field field, int context)

34:    {

35:        pushScreen(segundaTela);

36:        invokeLater(_popRunnable, 2000, false);

37:    }

38: }

Na primeira linha estamos trabalhando com uma nova interface: FieldChangeListener. Por isso, devemos implementar obrigatoriamente o método fieldChanged (linha 33). Este método é chamado quando ocorre uma mudanda de tela no aplicativo.

O resto da codificação já deve ser bem familiar ao leitor. Porém, ao criar o componente ButtonField, percebemos que estamos passando como estilo a constante ButtonField.CONSUME_CLICK. Esta constante indica que o botão irá auto-consumir o evento de clique. Na linha seguinte, adicionamos o listener de mudança de tela ao botão, logo, quando clicarmos no mesmo, o método fieldChange será acionado.

Este método, por sua vez, irá mostrar a segunda tela ao usuário, além disso, invoca a Thread criada na linha 26, depois de 2 segundos. A _popRunnable apenas remove a segunda tela da pilha de Screen´s.

Finalizando, nossa segunda tela tem um fundo totalmente azul, e nem usamos um Canvas para definir esta coloração como background. Veja a linha 2. Estamos usando a classe BackgroundFactory e seu método createSolidBackground para criar este efeito.

Porém, ao testar este aplicativo, perceba que a mudança de telas não trouxe nenhuma transição animada, fique calmo, vamos programar esta funcionalidade agora.

O primeiro passo é a criação de uma instância da classe TransitionContext. Esta define todas as características de uma transição animada entre duas telas.

A tabela abaixo é de suma importância, pois mostra todas as opções de animação e as propriedades que cada uma delas pode ter:

Transição

Atributos

TransitionContext.TRANSITION_FADE  TransitionContext.ATTR_DURATION

TransitionContext.ATTR_KIND

.TRANSITION_SLIDE TransitionContext.ATTR_DURATION

TransitionContext.ATTR_KIND

TransitionContext.ATTR_DIRECTION

TransitionContext.ATTR_STYLE

.TRANSITION_WIPE TransitionContext.ATTR_DURATION

TransitionContext.ATTR_KIND

TransitionContext.ATTR_DIRECTION

.TRANSITION_ZOOM TransitionContext.ATTR_DURATION

TransitionContext.ATTR_KIND

.TRANSITION_NONE Nenhum

Coloque as linhas de código abaixo no final do construtor da classe:

1: transitionContext transition = new TransitionContext(TransitionContext.TRANSITION_SLIDE);

2:  transition.setIntAttribute(TransitionContext.ATTR_DURATION, 500);

3:  transition.setIntAttribute(TransitionContext.ATTR_DIRECTION, TransitionContext.DIRECTION_RIGHT);

4:  transition.setIntAttribute(TransitionContext.ATTR_STYLE, TransitionContext.STYLE_PUSH);

Na primeira linha criamos a instância de TransitionContext. Seu construtor aceita um único parâmetro, uma constante que define qual será o efeito de transição. Como escolhemos SLIDE como parâmetro, podemos definir qualquer um de seus quatro parâmetros (veja a tabela novamente).

A definição das propriedades é feita com o método setIntAttribute ou setAttribute. A única diferença é que no primeiro o segundo parâmetro é um inteiro e no último, o segundo parâmetro é um Object.

Perceba que a definição das propriedades é muito simples, os dois parâmetros são bem legíveis. No primeiro definimos qual a propriedade e no segundo seu valor. Sempre usando as constantes da própria classe.

Porém, ainda não é o bastante para animar nossa transição.

Depois do código anterior adicione as duas linhas de código abaixo:

01. UiEngineInstance engine = Ui.getUiEngineInstance();

02. engine.setTransition(baseScreen, segundaTela, UiEngineInstance.TRIGGER_PUSH, transition);

O primeiro passo é criar uma instância de UiEngineInstance. Esta classe está presente desde a versão 4.7 do sistema operacional BlackBerry. Porém, o método setTransition usado logo a seguir está presente só a partir da versão 5.0

Os quatro parâmetros são:

  • Tela de origem;
  • Tela de destino;
  • Trigger: pode ser umas das duas constantes UiEngineInstance.TRIGGER_PUSH ou UiEngineInstance.TRIGGER_POP;
  • Instância de TransitionContext.

Agora execute novamente o aplicativo e verá que na mudança da primeira para a segunda tela a animação slide está presente.

Para completar nosso exemplo, adicione as linhas de código da listagem abaixo, elas farão com a transição da segunda para a primeira tela também seja animada:

01. transition = new TransitionContext(TransitionContext.TRANSITION_FADE);

02. transition.setIntAttribute(TransitionContext.ATTR_DURATION, 500);

03. transition.setIntAttribute(TransitionContext.ATTR_KIND, TransitionContext.KIND_OUT);

04. engine.setTransition(segundaTela, null, UiEngineInstance.TRIGGER_POP, transition);

Explore os parâmetros do construtor TransitionContext e conheça as outras transições disponíveis.
—-

Quaisquer dúvidas sobre o conteúdo postado aqui, tire sua dúvida na parte de comentários ou a envie para o email blackberrydevgroup@gmail.com e responderemos assim que possível.

Bons estudos!!!

NOTA: Tutorial baseado no artigo de Ricardo Ogliari. Clique aqui para ver o documento na íntegra.

Deixar uma resposta

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Modificar )

Imagem do Twitter

You are commenting using your Twitter account. Log Out / Modificar )

Facebook photo

You are commenting using your Facebook account. Log Out / Modificar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.