-1

我可能看起来很无知,但我还没有找到太多关于如何解决开发我的 BlackBerry 应用程序的问题的信息。

基本上我已经构建了一个包含一些图像按钮的 UI。我想要做的是当我单击其中一个按钮时,我希望屏幕中央的图像无缝切换到另一个图像。

我目前没有使用任何线程,但从我收集到的内容中我需要吗?

还是我只需在按钮侦听器中按下一个新屏幕并调用类的构造函数并用不同的图像重建页面?

抱歉,如果不清楚,我将非常感谢有关如何执行此操作的一些基本信息或详细解释黑莓页面刷新的链接!

非常感谢

编辑:好的,这是我代码的一小部分:

这基本上是我在听众中尝试的最后一件事,当我按下两个按钮之一时,我不知道如何更改图像(flagField)!唯一对我有用的是 pushScreen(new Csps("americanflag")); 每次我都会按下一个按钮,但性能很差,而且我只剩下一堆屏幕,不理想。

我整天都在尝试这样做,呵呵......叹息,这里是:

public class CSP extends UiApplication 
{
public static void main(String[] args)
{
    CSP theApp = new CSP(); 
    theApp.enterEventDispatcher(); 
}

public CSP() 
{ 
    CSPS csps = new CSPS();
    pushScreen(csps); 
} 
}

class CSPS extends MainScreen implements FieldChangeListener
{

int width = Display.getWidth();
int height = Display.getHeight();

ButtonField backButton;

ImageButtonField canadianFlag;
ImageButtonField americanFlag;
Bitmap changeableFlag;
String currentFlag ="canada_flag.png";
BitmapField flagField;

canadianFlag = construct("canada_flag.png", 0.18);
americanFlag = construct("us.gif", 0.18);

    canadianFlag.setChangeListener(this);
    americanFlag.setChangeListener(this);

    add(flagField);
    add(canadianFlag);
    add(americanFlag);
//LISTENERS
public void fieldChanged(Field field, int context){


    if(field == canadianFlag){
        setCurrentFlagResource("canada_flag.png");
        BitmapField newFlagField = populateFlagField(currentFlag, 0.3);
        replace(flagField, newFlagField);

        this.invalidate();
        this.doPaint();
        this.updateDisplay();

    }
    else if(field == americanFlag){

        setCurrentFlagResource("american-flag.gif");
        BitmapField newFlagField = populateFlagField(currentFlag, 0.3);
        replace(flagField, newFlagField);

        this.invalidate();
        this.doPaint();
        this.updateDisplay();

    }

setCurrentFlagRessource 方法将 flagField 属性设置为适当的 BitmapField

4

3 回答 3

2

中调用setBitmap()了一个方法BitmapField

在听众中,您应该简单地调用flagField.setBitmap(newbitmap). 您也可以使用该方法setImage()。无需调用invalidate(),updateUI 等。

如果您IllegalStateException在使用此方法时遇到任何问题,只需获取 Applicaton Event 锁定对象的锁定或调用代码即可。

于 2012-02-12T05:16:13.940 回答
1

如果您从某个可能会阻塞的地方(如 Web 服务器)获取图像,则只需要使用线程。您应该只需要更新图像,尽管您可能需要在按钮或屏幕上调用 invalidate()。真正有帮助的是一些关于你在做什么的信息。您甚至没有告诉我们您使用什么类来显示图像,是否扩展了它等等。

于 2012-02-10T19:25:50.310 回答
0

我不知道你在代码中做了什么;但是刷新屏幕的方式不是这样的;

因此,我更改了您尝试刷新屏幕的CSPS屏幕;请看下面的代码...

class CSPS extends MainScreen implements FieldChangeListener
{

int width = Display.getWidth();
int height = Display.getHeight();

ButtonField backButton;

//ImageButtonField canadianFlag;
//ImageButtonField americanFlag;
Bitmap changeableFlag;
String currentFlag ="canada_flag.png";
BitmapField flagField;
public CSPS() 
{
    createGUI();
}       

public void createGUI() 
{
    canadianFlag = construct("canada_flag.png", 0.18);
    americanFlag = construct("us.gif", 0.18);

        canadianFlag.setChangeListener(this);
        americanFlag.setChangeListener(this);

        add(flagField);
        add(canadianFlag);
        add(americanFlag);
    //LISTENERS
}

public void fieldChanged(Field field, int context){


    if(field == canadianFlag)
    {
        setCurrentFlagResource("canada_flag.png");
        BitmapField newFlagField = populateFlagField(currentFlag, 0.3);
        replace(flagField, newFlagField);

        deleteAll();
        createGUI();
        invalidate();
    }
    else if(field == americanFlag)
    {
        setCurrentFlagResource("american-flag.gif");
        BitmapField newFlagField = populateFlagField(currentFlag, 0.3);
        replace(flagField, newFlagField);

        deleteAll();
        createGUI();
        invalidate();   
    }
}
}
  1. 构造一个createGUI()方法,在其中编写您必须为该屏幕设计的代码。不仅是这个屏幕;你所创造的一切都是这样的;和
deleteAll();
createGUI();
invalidate();
  1. 要刷新屏幕,请执行上述三行;删除所有字段并再次调用createGUI()方法;最后是invalidate();
于 2012-02-11T05:34:36.477 回答