User interface 黑莓-背景位图不';不适合滚动页面

User interface 黑莓-背景位图不';不适合滚动页面,user-interface,blackberry,scroll,background,User Interface,Blackberry,Scroll,Background,我的黑莓应用程序屏幕上有一个背景位图。屏幕已启用滚动,因为我必须有一个滚动。我面临的问题是,当我向下滚动页面时,背景位图不适合滚动页面,而只是显示纯白色背景。我们需要为每个滚动页面绘制背景位图吗 我的位图大小是:360*480 更新代码为: class BGVerticalFieldManager extends VerticalFieldManager { Bitmap mBgBitmap = null; int mBgWidth = -1; int mBgHeight

我的黑莓应用程序屏幕上有一个背景位图。屏幕已启用滚动,因为我必须有一个滚动。我面临的问题是,当我向下滚动页面时,背景位图不适合滚动页面,而只是显示纯白色背景。我们需要为每个滚动页面绘制背景位图吗

我的位图大小是:360*480

更新代码为:

class BGVerticalFieldManager extends VerticalFieldManager {
    Bitmap mBgBitmap = null;
    int mBgWidth = -1;
    int mBgHeight = -1;
    int mBgX = -1;
    int mBgY = -1;

    public BGVerticalFieldManager(Bitmap background) {
            super(USE_ALL_WIDTH | USE_ALL_HEIGHT | VERTICAL_SCROLL
                            | VERTICAL_SCROLLBAR);
            mBgBitmap = background;
            mBgWidth = mBgBitmap.getWidth();
            mBgHeight = mBgBitmap.getHeight();
            mBgX = (Display.getWidth() - mBgWidth) >> 1;
            mBgY = (Display.getHeight() - mBgHeight) >> 1;

    }

    protected void paintBackground(Graphics graphics) {
            paintBackgroundBitmap(graphics);
            invalidate();
    }

    /*private void paintBackgroundBitmap(Graphics graphics) {
            if (null != mBgBitmap) {
                    int x = mBgX + ((MainScreen)getScreen())
                        .getMainManager().getHorizontalScroll();
                    int y = mBgY + ((MainScreen)getScreen())
                        .getMainManager().getVerticalScroll();

                    graphics.drawBitmap(x, y, mBgWidth, 
                        mBgHeight, mBgBitmap, 0, 0);
            }
    } */
    private void paintBackgroundBitmap(Graphics graphics) {
    if (null != mBgBitmap) {
        int x = mBgX
                + getHorizontalScroll();
        int y = mBgY
                + getVerticalScroll();
        graphics.drawBitmap(x, y, mBgWidth, mBgHeight, mBgBitmap, 0, 0);
    }
}
}

从另一个文件调用上述背景位图代码,如下所示:

public MyFirstScreen ( String label, int screenState, int selectedObj, boolean bUI ) 
{    

   super(VERTICAL_SCROLL | VERTICAL_SCROLLBAR); // I must need it ...

   appTitle = label;
   setTitle(appTitle);

   background = Bitmap.getBitmapResource ("HomeBack.png");        
   add(_container = new BGVerticalFieldManager(background));

   ..............................
   ..............................
   ..............................

}

要获得实际的滚动位置,您可以使用:


使用示例:

class Scr extends MainScreen {

    private BGVerticalFieldManager mContainer;

    public Scr() {
        super(NO_VERTICAL_SCROLL);
        setTitle("Screen Title");
        Bitmap bitmap = Bitmap.getBitmapResource("BoldOEM.jpg");
        add(mContainer = new BGVerticalFieldManager(bitmap));
        for (int i = 0; i < 100; i++) {
            mContainer.add(new LabelField("List item #" + String.valueOf(i)));
            mContainer.add(new NullField(FOCUSABLE));
        }
    }
}
class Scr扩展主屏幕{
私人BGVerticalFieldManager McContainer;
公共Scr(){
超级(无垂直滚动);
设置标题(“屏幕标题”);
位图位图=Bitmap.getBitmapResource(“BoldOEM.jpg”);
添加(mContainer=new BGVerticalFieldManager(位图));
对于(int i=0;i<100;i++){
mContainer.add(新的LabelField(“列表项#“+String.valueOf(i));
添加(新的空字段(可聚焦));
}
}
}

Max Gontar的反应是电池杀手

protected void paintBackground(Graphics graphics) {
  paintBackgroundBitmap(graphics);
  invalidate();
}

因为invalidate()将导致调用paintBackground(Graphics)。

当我添加第一组代码并编译它时,它抛出错误“找不到符号getMainManager()”。我导入了import net.rim.device.api.ui.Manager;,但仍然观察到同样的错误。我做错了什么吗?我还有导入net.rim.device.api.ui.container.MainScreen;但仍然是相同的错误。我已经通过代码理解,然后测试,它的工作原理像魅力!非常感谢您,非常感谢您的及时帮助!您好,Max,我发现了一个问题,您的代码使用中存在一个问题。正如我前面提到的,我添加了您的代码,以便在我的应用程序屏幕的背景中应用背景位图,没有任何问题。但我现在看到,默认情况下,它创建了两个页面(虽然没有控件,但我们可以滚动到第二个页面)由于我的应用程序屏幕需要滚动条,所以我添加了super(垂直滚动条);。但我只有一个页面上的控件,若用户输入了一些东西,那个么它将需要滚动。但这段代码创建第二个页面时也会在第二个页面并没有的情况下取消设置。您好!你能用你提到的代码更新你的问题吗?嗨,Max,更新后的代码很好。但它只在第一页有效(显示),我的意思是我必须在屏幕上有滚动条,在那里我还保留背景位图和你的代码。在这种情况下,修改后的代码,只显示第一页的位图,而不在向下滚动的第二页中显示。同时,正如我之前观察到的一样,默认情况下,它仍然会创建最初不需要第二页的两页。我现在更新我的代码,向您展示它是怎样的。
protected void paintBackground(Graphics graphics) {
  paintBackgroundBitmap(graphics);
  invalidate();
}