在android中设置平铺动画

时间:2013-12-09 19:35:55

标签: android animation

[已编辑]代码更改。

有一个24帧的图块。 我如何动态地从他们那里制作动画? 我试过这个,但根本没有效果:

ImageView image = (ImageView)findViewById(R.id.imageView);
Bitmap TileSet = BitmapFactory.decodeResource(getResources(), R.drawable.Image);
Bitmap frame = Bitmap.createBitmap(256, 128, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(frame);

for (int i = 10, width, height; i < 24; i++) {
  width = i/4;
  height = i%4;
  try {
    Thread.sleep(125);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  canvas.drawBitmap(TileSet
                    , new Rect(256 * width, 128 * height
                                , 256 * (width+1), 128 * (height+1))
                    , new Rect(0, 0, image.getWidth(), image.getHeight())
                    , null);
  image.setImageBitmap(frame);
}

这个想法是画这个动画1次并永远关闭这个活动。这就是为什么我不能理解如何在这里使用onDraw函数。

[编辑2]

private void startAnimating() {
Bitmap frame;
long beginLoopTime = 0;
for (int i = 0, width, height; i < 32; i++) {
  width = i/8;
  height = i%8;

  while(System.currentTimeMillis() - beginLoopTime < DURATION) {}

  frame = Bitmap.createBitmap(TileSet, 256 * width, 128 * height, 256, 128);

  final BitmapDrawable temp = new BitmapDrawable(getResources(), frame);

  image.post(new Runnable() {
    @Override
    public void run() {
      image.setBackground(temp);
      image.invalidate();
    }
  });

  beginLoopTime = System.currentTimeMillis();
}

}

此功能仅绘制最后一帧。 我尝试使用onWindowFocusChanged ......效果相同。

1 个答案:

答案 0 :(得分:1)

您可以使用xml创建帧动画并在活动中加载动画。或者创建一个runnable并在UI线程中运行它。

See this link to get the basic Idea about frame animation in android.

Usage of post method and runnable