首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SurfaceView画布上放置AnimationDrawable

如何在SurfaceView画布上放置AnimationDrawable
EN

Stack Overflow用户
提问于 2011-08-06 02:25:53
回答 1查看 4.5K关注 0票数 4

游戏开发的新手,我在SurfaceView画布上放置一个AnimationDrawable遇到了麻烦。这是一个简单游戏的一部分,用户触摸屏幕,一个动画gif被放置在看起来像爆炸的位置。我可以使用下面显示的代码通过位图来实现这一点,但将其转换为AnimationDrawable是我被卡住的地方。我可以从ImageView创建AnimationDrawable,但我也找不到将ImageView放到画布上的方法……

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

代码语言:javascript
复制
Bitmap explodeBmp = BitmapFactory.decodeResource(getResources(), R.drawable.explode4);
canvas.drawBitmap(explodeBmp, coords.getX()-(explodeBmp.getWidth()/2), coords.getY()-(explodeBmp.getHeight()/2), paint);

如果我尝试将位图转换为AnimationDrawable并启动它,则会抛出ClassCastException:

代码语言:javascript
复制
AnimationDrawable explosionAnimation = (AnimationDrawable) ((Drawable) new BitmapDrawable(explodeBmp));
explosionAnimation.start();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-10 00:39:27

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

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

下面是代码片段:

代码语言:javascript
复制
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));
      }
    }
   ...
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6960932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档