animationDrawable 只显示最后一帧

animationDrawable only displays last frame

我正在尝试使用多个 png 图像创建动画。这是我的代码:

AnimationDrawable animation = new AnimationDrawable();

for (int i = 0; i < translate_text.length(); i++)
{
    byte[] byteArray = Base64.getDecoder().decode(client._fromServer.elementAt(i));
    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
    ImageView image = (ImageView) findViewById(R.id.sign);
    image.setImageBitmap(Bitmap.createScaledBitmap(bmp, image.getWidth(), image.getHeight(), false));
    animation.addFrame(image.getDrawable(), 1000);
}

animation.setOneShot(true);
animation.start();

但这只显示最后一帧...有什么想法吗?

编辑:可能应该早点这样做,但这里是:

translate_text 是一个字符串。它表示图像序列。例如,如果字符串是 "bob" 那么应该有 3 个图像:字母 B、字母 O 和字母 B。

client._fromServer 是一个字符串向量。每个字符串都是 图像本身 以 base64 编码。这就是为什么 client._fromServer.elementsAt(i) 是一个字符串,需要解码并变成 byteArray.

我认为这是因为你从同一个 ImageView.
得到了 Drawable 当您执行 image.setImageBitmap() 时,它会更新 ImageView 中 Drawable 的引用并且 AnimationDrawable 也会受到影响。
您应该为每个 addFrame 调用使用不同的 Drawable 实例。

类似的东西:

AnimationDrawable animation = new AnimationDrawable();
ImageView image = (ImageView) findViewById(R.id.sign);

for (int i = 0; i < translate_text.length(); i++)
{
    byte[] byteArray = Base64.getDecoder().decode(client._fromServer.elementAt(i));
    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
    final Bitmap scaledBitmap = Bitmap.createScaledBitmap(bmp, image.getWidth(), image.getHeight(), false);
    Drawable drawable = new BitmapDrawable(getResources(), scaledBitmap);
    animation.addFrame(drawable, 1000);
}

animation.setOneShot(true);
animation.start();