负荷图像黑莓
问题描述:
如何在其中仅一个页面是在黑莓屏幕上一次显示的页面的形式显示图像。在向后滚动的图像将在运行时加载。因此,启动时加载的图像不会消耗时间。
编辑:我使用从从指定的路径和图像调整大小的增加数them.As加载图像黑莓设备存储器加载图像的LoadImage功能,它window.There打开期间增加了启动时间的内置应用程序(媒体)在黑莓手机,图像加载,而不需要任何额外的时间。我的想法是显示适合黑莓屏幕的特定数量的图像。 作为用户向下滚动到屏幕的底部,应用程序将加载和显示更多的图像。所以我的问题是如何在用户达到黑莓的屏幕和显示一个多行图像的底部检测。负荷图像黑莓
答
保持阵列图像url和当前图像索引。在屏幕上放置一个BitmapField。为Next/Prev添加菜单项。在下一个从递增索引URL加载位图时,将其设置为BitmapField并使屏幕无效。在上一个做减法索引相同。
- 你可以(也许在风暴)使用按钮很好,但菜单是在单独的线程强制性
- 负荷图像(特别是如果它们存储在网页)
- 可以实现高速缓存(在应用程序的内存或通过保存在存储装置
- 图像)一些文本字段可能会有所帮助(文件名,类型,大小,dimentions等)
UPDATE 为了这个目的,你可以使用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));
}
});
}
}
PS用这种方法,你将能够赶上只,如果有在屏幕上的图像不够滚动事件的问题。考虑使用Screen.navigationMovement(int, int, int, int)。别忘了用拨轮和触摸屏进行测试。
顺便说一下我的看法是,这将是最好的一次使用一些线程队列中加载的所有图像(图像所以将异步无锁UI加载)
增加了问题的更多信息 – Maneesh 2010-03-26 05:22:58