Анимированный персонаж Android в SurfaceView - PullRequest
3 голосов
/ 30 июня 2011

Я хочу анимировать персонажа (например, запустить собаку) на экране.AnimationDrawable кажется идеально подходит для этого, и AnimationDrawable требует ImageView.Как добавить и переместить ImageView в SurfaceView?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 05 марта 2012

Вам не нужно ImageView.

Если ваша анимация XML Drawable, вы можете загрузить ее непосредственно из Resources в переменную AnimationDrawable:

Resources res = context.getResources();
AnimationDrawable animation = (AnimationDrawable)res.getDrawable(R.drawable.anim);      

Затем установить границы и нарисовать на холсте:

animation.setBounds(left, top, right, bottom);
animation.draw(canvas);

Вам также необходимо вручную настроить анимацию для запуска в следующий запланированный интервал.Это может быть достигнуто путем создания нового обратного вызова с использованием animation.setCallback, затем создания экземпляра android.os.Handler и использования метода handler.postAtTime для добавления следующего кадра анимации в текущую очередь сообщений Thread.

animation.setCallback(new Callback() {

  @Override
  public void unscheduleDrawable(Drawable who, Runnable what) {
    return;
  }

  @Override
  public void scheduleDrawable(Drawable who, Runnable what, long when) {
    //Schedules a message to be posted to the thread that contains the animation
    //at the next interval. 
    //Required for the animation to run. 
    Handler h = new Handler(); 
    h.postAtTime(what, when);
  }

  @Override
  public void invalidateDrawable(Drawable who) {
    return;
  }
});

animation.start();
0 голосов
/ 30 июня 2011

С SurfaceView вы несете ответственность за то, чтобы нарисовать все в нем. Вам не нужен AnimationDrawable или какой-либо вид для визуализации вашего персонажа. Взгляните на пример Lunar Lander от Google.

...