如果您使用的是 6.0(或更高版本)的最低 BlackBerry OS,则BitmapField
该类直接支持动画 gif。
如果您需要支持较低的操作系统版本,那么您只需要在您的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
该类的工作方式并不是很好的多线程实践(用于停止线程)。如果你真的想让代码更好,你可以实现这个解决方案,或者
使用我在这个答案中展示的技术。
在此处阅读有关此内容的更多信息。