在黑莓中滚动动态加载图像

Man*_*esh 1 blackberry image blackberry-storm java-me

如何以黑莓屏幕上一次只显示一页的页面形式显示图像.向下滚动后续图像将在运行时加载.因此,加载图像不会消耗启动时间.
编辑:我正在使用loadimage函数,它从黑莓设备内存加载图像,从指定路径加载图像并调整它们的大小.随着图像数量的增加,它增加了窗口打开期间的启动时间.有一个内置应用程序(媒体)在黑莓手机中,图像加载而不需要任何额外的时间.我的想法是显示适合黑莓屏幕的特定数量的图像.当用户向下滚动到屏幕底部时,应用程序将加载并显示更多图像.所以我的问题是如何检测用户何时到达黑莓屏幕底部并再显示一行图像.

Mak*_*tar 5

保持图像url和当前图像索引的数组.将BitmapField放在屏幕上.添加下一个/上一个的菜单项.在下一步从递增的索引URL加载位图,将其设置为BitmapField并使屏幕无效.在Prev上做同样的减少索引.

  • 你也可以使用按钮(也许在风暴中),但菜单是强制性的
  • 在单独的线程中加载图像(特别是如果它们存储在Web中)
  • 您可以实现缓存(在应用程序内存中或通过在设备存储上保存图像)
  • 某些文本字段可能有用(文件名,类型,大小,尺寸等)

更新 为此,您可以使用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)