Man*_*esh 1 blackberry image blackberry-storm java-me
如何以黑莓屏幕上一次只显示一页的页面形式显示图像.向下滚动后续图像将在运行时加载.因此,加载图像不会消耗启动时间.
编辑:我正在使用loadimage函数,它从黑莓设备内存加载图像,从指定路径加载图像并调整它们的大小.随着图像数量的增加,它增加了窗口打开期间的启动时间.有一个内置应用程序(媒体)在黑莓手机中,图像加载而不需要任何额外的时间.我的想法是显示适合黑莓屏幕的特定数量的图像.当用户向下滚动到屏幕底部时,应用程序将加载并显示更多图像.所以我的问题是如何检测用户何时到达黑莓屏幕底部并再显示一行图像.
保持图像url和当前图像索引的数组.将BitmapField放在屏幕上.添加下一个/上一个的菜单项.在下一步从递增的索引URL加载位图,将其设置为BitmapField并使屏幕无效.在Prev上做同样的减少索引.
更新 为此,您可以使用ScrollChangeListener
试试这段代码:
class Scr extends MainScreen implements ScrollChangeListener {
static int mRowNumber = 0;
public Scr() {
getMainManager().setScrollListener(this);
//preload some images on the start
for (int i = 0; i < 20; i++) {
mRowNumber = i;
add(new BitmapField(downloadBitmap(), FOCUSABLE));
}
}
public static Bitmap downloadBitmap() {
Bitmap result = new Bitmap(200, 80);
Graphics g = new Graphics(result);
g.drawRect(0, 0, 200, 80);
g.drawText("row #" + String.valueOf(mRowNumber), 30, 30);
return result;
}
public void scrollChanged(final Manager manager, int newHorizontalScroll,
int newVerticalScroll) {
int testBottomScroll = manager.getVirtualHeight()
- manager.getVisibleHeight();
if (testBottomScroll == newVerticalScroll) {
mRowNumber++;
(new Thread(new Runnable() {
public void run() {
// simulating download
Bitmap bitmap = downloadBitmap();
// update ui in thread safe way
addBitmap(bitmap);
}
})).start();
}
}
public void addBitmap(final Bitmap bitmap) {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
getMainManager().add(new BitmapField(bitmap, FOCUSABLE));
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
PS这种方法的问题是,只有在屏幕上有足够的图像时,您才能捕获滚动事件.考虑使用Screen.navigationMovement(int,int,int,int).别忘了用拨轮和触摸屏测试它.
我的意见是,最好使用一些线程队列一次加载所有图像(因此图像将异步加载而不锁定ui)