Android 如何在SurfaceView画布上放置AnimationDrawable

Android 如何在SurfaceView画布上放置AnimationDrawable,android,canvas,bitmap,surfaceview,Android,Canvas,Bitmap,Surfaceview,没有游戏开发,我很难将动画绘图放到SurfaceView画布上。这是一个简单游戏的一部分,用户触摸屏幕,一个动画gif被放置在那个看起来像爆炸的位置。我可以使用下面所示的代码通过位图来实现这一点,但将其转换为AnimationDrawable是我遇到的难题。我可以从ImageView创建AnimationDrawable,但我也找不到将ImageView放到画布上的方法 我是不是走错了路?有没有更简单的方法让动画gif以x,y坐标显示在SurfaceView的画布上 Bitmap explode

没有游戏开发,我很难将动画绘图放到SurfaceView画布上。这是一个简单游戏的一部分,用户触摸屏幕,一个动画gif被放置在那个看起来像爆炸的位置。我可以使用下面所示的代码通过位图来实现这一点,但将其转换为AnimationDrawable是我遇到的难题。我可以从ImageView创建AnimationDrawable,但我也找不到将ImageView放到画布上的方法

我是不是走错了路?有没有更简单的方法让动画gif以x,y坐标显示在SurfaceView的画布上

Bitmap explodeBmp = BitmapFactory.decodeResource(getResources(), R.drawable.explode4);
canvas.drawBitmap(explodeBmp, coords.getX()-(explodeBmp.getWidth()/2), coords.getY()-(explodeBmp.getHeight()/2), paint);
如果我尝试将位图转换为AnimationDrawable并启动它,则会引发ClassCastException:

AnimationDrawable explosionAnimation = (AnimationDrawable) ((Drawable) new BitmapDrawable(explodeBmp));
explosionAnimation.start();

经过不断的挖掘,我找到了答案。。。似乎我喜欢在这里回答我自己的问题

刚找到电影课。我可以使用InputStream将动画gif加载到其中,然后在onDraw()中逐点播放电影,因为电影类支持draw()方法,在该方法中我可以提供画布和x,y坐标

下面是代码snippit:

InputStream is = context.getResources().openRawResource(R.drawable.dotz_explosion);
Movie explodeGif = Movie.decodeStream(is);

...

@Override
protected void onDraw(Canvas canvas) {
    ...
      GraphicObject explosion = (GraphicObject)ex.next();

      long now = android.os.SystemClock.uptimeMillis();
      if (explosion.getMovieStart() == 0) { // first time
         explosion.setMovieStart(now);
      }

      int relTime = (int)((now - explosion.getMovieStart()) % explodeGif.duration());
      if ((now - explosion.getMovieStart()) >= explodeGif.duration()) {
         removeArrayExplosions.add(removeIndex);
         explosion.setMovieStart(0);
      } else {
         explodeGif.setTime(relTime);
         explodeGif.draw(canvas, explosion.getX()-(explodeGif.width()/2), explosion.getY()-(explodeGif.height()/2));
      }
    }
   ...
}

有人至少有一个暗示吗?评论?引导正确的方向?有没有游戏开发者?不推荐使用GIF:积极劝阻。您应该使用XML中定义的动画列表。使用电影会非常昂贵。对于现在在谷歌上搜索的人来说:@richieh和内存使用一样昂贵吗?我有几个旧的机器人,我试过我的应用程序,但我没有看到任何性能问题。我已经有几十部电影同时播放,没有问题。相反,根据我的经验,使用动画列表是昂贵的。列表中的每一部分都将生成一个隔离位图,这将占用大量内存。