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();
我正在尝试使用多个 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();