Surface中的Android动画角色

时间:2011-06-30 07:17:10

标签: android animation surfaceview

我想在屏幕上为角色(例如跑狗)设置动画。 AnimationDrawable似乎非常适合这种情况,而AnimationDrawable需要一个ImageView。如何在SurfaceView中添加和移动ImageView?

感谢。

2 个答案:

答案 0 :(得分:4)

您不需要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();

答案 1 :(得分:0)

使用SurfaceView,您有责任在其中绘制所有内容。您不需要AnimationDrawable或任何视图来渲染您的角色。查看来自Google的Lunar Lander示例游戏。