我想在我的应用顶部显示.gif横幅。我正在使用此代码来显示动画字段BB Animated GIF Field。问题是我想每分钟刷新这个横幅。我尝试了很多东西:
创建一个新对象,但这不会更改横幅。
创建一个新的动画字段并尝试替换它.... IllegalArgumentException
。 (我正在尝试使用Thread
从invokeLater()
内部更改...我也使用了invokeAndWait()
删除此动画字段并添加一个新字段(来自invokeLater()
或invokeAndWait()
- > IllegalException
)
将位图设置为此字段。第一个动画没有显示,我可以看到来自另一个横幅的图像,但它没有动画。
有什么想法吗?
如果您需要查看一些代码,我会尝试明天发布。
答案 0 :(得分:1)
如果您使用的是6.0(或更高版本)的最低BlackBerry OS,则为BitmapField
课程directly supports animated gifs。
如果您需要支持较低的操作系统版本,那么您只需要在AnimatedGIFField
类中添加一个方法来换出旧图像,并使用新图像:
public void setImage(EncodedImage image) {
// Call BitmapField#setImage()
super.setImage(image);
// Store the image and its dimensions.
_image = image;
_width = image.getWidth();
_height = image.getHeight();
_currentFrame = 0;
// Stop the previous thread.
_animatorThread.stop();
// Start a new animation thread.
_animatorThread = new AnimatorThread(this);
_animatorThread.start();
}
请注意,这是一个UI操作。因此,如果要从后台线程更新映像,请确保使用将其置于UI线程的调用来包装它。例如:
final EncodedImage eImage = EncodedImage.getEncodedImageResource("img/banner.gif");
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
_animatedBanner.setImage(eImage);
}
});
更新:我还注意到AnimatedGIFField
类的工作方式不是很好的多线程练习(用于停止线程)。如果你真的想让代码变得更好,你可以implement this solution或者
use the technique I show in this answer