SurfaceView 中的 Android 动画角色

标签 android animation surfaceview

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

谢谢。

最佳答案

您不需要 ImageView

如果您的动画是 XML Drawable,您可以将它直接从 Resources 加载到 AnimationDrawable 变量中:

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

然后设置它的边界并在 Canvas 上绘制:

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();

关于SurfaceView 中的 Android 动画角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6531246/

相关文章:

java - 如何在 Android 中进行 UUEncode

javascript - 用于加载图像的预加载器

java - 键盘操作事件在 JavaFX 中不起作用

android - 如果在 ScrollView 中,SurfaceView 会滞后

java - 当我的游戏应该重新启动时,我应该如何处理重置 SurfaceView 和 Thread?

安卓10 : ACTION_VIEW becomes broken

android - 如何在android google map中实现第一人称视角?

Android:CameraSourcePreview 没有填满整个屏幕高度

javascript - angular ngShow 与 animate.css

android - 使用自定义SurfaceView和线程进行Android游戏编程(示例)