【问题标题】:Cannot scroll screen while loading image加载图像时无法滚动屏幕
【发布时间】:2015-06-03 19:16:30
【问题描述】:

我有以下屏幕:

class DemoScreen extends MainScreen {

private LabelField lbl1, lbl2, lbl3, lbl4, lbl5;
private BitmapField bf;
private ButtonField btn;
private String IMG_URL = "http://www.foo.bar/img/blah.jpg";

public DemoScreen(){
    bf = new BitmapField(Bitmap.getBitmapResource("img/blank.png");
    btn = new ButtonField("Click me", FOCUSABLE | ButtonField.CONSUME_CLICK);

    add(lbl1);
    add(lbl2);
    add(bf);
    add(lbl3);
    add(lbl4);
    add(lbl5);
    add(btn);
}

public void updateBitmap(){
    UiApplication.getUiApplication.invokeLater()(new Runnable(){
        public void run(){
            Bitmap bmp = BitmapUtil.loadBitmapFromURL(IMG_URL);
            bf.setBitmap(bmp);
        }
    });
}
}

一眼看代码,当屏幕显示时,首先会加载一个空白图像,然后将替换为从 URL 加载的真实图像。此代码在模拟器上按预期工作。但在真实设备上,有一个怪癖:在加载图像之前(通过 BitmapUtil.loadBitmapFromURL),屏幕无法滚动。

我尝试将 updateBitmap 部分更改为:

public void updateBitmap(){
    UiApplication.getUiApplication.invokeLater()(new Runnable(){
        public void run(){
            Bitmap bmp = BitmapUtil.loadBitmapFromURL(IMG_URL);
            bf.setBitmap(bmp);
        }
    });
}

public void updateBitmap(){
    synchronized(UiApplication.getEventLock()){
        Bitmap bmp = BitmapUtil.loadBitmapFromURL(IMG_URL);
        bf.setBitmap(bmp);
    }
}

它们都不起作用。有没有办法在图像加载仍在进行时使屏幕可滚动? T

顺便说一句,这是图片加载部分:

https://gist.github.com/anta40/93f1aea80d4de09ca77a

https://gist.github.com/anta40/2a8d6d8c79e4fa1530cf

【问题讨论】:

    标签: blackberry


    【解决方案1】:

    您正在 uithread 上下载位图。首先因为按钮点击发生在uithread上,然后你用invokeLater包装。

    Bitmap bmp=BitmapUtil.loadBitmapFromURL(IMG_URL); 会阻塞 uithread,直到图像下载完毕。

    试试这个:

    public void updateBitmap()
        {
            new Thread()
            {
                public void run()
                {
                    final Bitmap bmp = BitmapUtil.loadBitmapFromURL(IMG_URL);
                    UiApplication.getUiApplication.invokeLater(new Runnable()
                    {
                        public void run()
                        {
                            bf.setBitmap(bmp);
                        }
                    });
                }
            }.start();
         }
    

    【讨论】:

    • 谢谢凯文。按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 2020-04-18
    • 2015-04-25
    • 2015-02-21
    • 1970-01-01
    相关资源
    最近更新 更多