segunda-feira, 5 de julho de 2010

Android - Animação (Sprite)

Olá povo,

Quem já programou (ou ainda programa) com Java ME, sabe que ele pode contar com uma API específica para desenvolvimento de Jogos. E nessa biblioteca temos uma classe chamada Sprite, que permite fazer uma animação a partir de uma sequência de imagens.

Pois bem, meu desafiador aluno Rodrigo Otávio, me perguntou como poderíamos fazer algo similar no Android. Como não tinha feito isso com Android ainda, fui em busca de resposta. Procurei na internet e achei algumas pessoas indicando como fazer a proeza utilizando Handler. Mas achei que o Android não podia ter deixado uma coisa tão simples, difícil de se fazer.

Falei com meu nobre colega Artur Botelho, que trabalhou em 15 milhões de projetos de jogos pra ver se ele já tinha visto algo. E eis que surge a solução. Vamos a ela!

Pegue as imagens que formarão sua animação. Coloquei as que eu utilizei aqui abaixo:



Depois é só definir nossa animação em um arquivo XML que deve ficar dentro do diretório /res/drawable do seu projeto Android.

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item 
  android:drawable="@drawable/crono1" 
  android:duration="200" />
<item 
  android:drawable="@drawable/crono2" 
  android:duration="200" />
<item 
  android:drawable="@drawable/crono3"
  android:duration="200" />
<item
  android:drawable="@drawable/crono4" 
  android:duration="200" />
</animation-list>


No arquivo acima, vemos que utilizamos uma imagem por frame (quadro) de animação que queremos utilizar, bem como o tempo que cada imagem deve ficar. Outro ponto interessante é o attributo oneshot, que se setado pra true, fará com que a animação só execute uma vez.

Agora é só utilizar a animação na sua ImageView. Vejamos abaixo como iniciar/parar uma animação ao tocar em um ImageView.

public class Sprite2dExample extends Activity {

  private AnimationDrawable spriteAnimation;

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ImageView sprite = new ImageView(this);

    setContentView(sprite);

    sprite.setBackgroundResource(R.drawable.sprite);
    this.spriteAnimation = 
      (AnimationDrawable)sprite.getBackground();
  }

  public boolean onTouchEvent(MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN){
      if (spriteAnimation.isRunning()){
        this.spriteAnimation.stop();
      } else {
        this.spriteAnimation.start();
      }
      return true;
    }
    return super.onTouchEvent(event);
  }
}


Espero que tenham gostado :)

4br4ç05,
nglauber

3 comentários:

Ed Prado disse...

Bem interessante!
Também tem essa...A galera tentou portar as classes de games do J2ME pra android dá uma olhada
http://code.google.com/p/sporksoft/source/browse/trunk/#trunk/com/sporksoft/game

Anônimo disse...

Bem fácil.
Obrigado!

César Oliveira disse...

Boa noite,

Até parece fácil. hehehehe
E no final das contas até é fácil.

Parabéns pela matéria

Cumprimentos
Malainho