BlackBerry - фоновый растр не подходит для прокрутки страницы - PullRequest
1 голос
/ 16 декабря 2009

У меня есть фоновый рисунок на экране приложения Blackberry. На экране включена прокрутка, так как я должен иметь прокрутку. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я прокручиваю страницу вниз, фоновое растровое изображение не подходит для прокручиваемой страницы, а показывает просто белый фон. Нужно ли рисовать фоновый рисунок для каждой страницы с прокруткой?

Мой размер растрового изображения: 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));

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

}

Ответы [ 2 ]

2 голосов
/ 17 декабря 2009

Чтобы получить фактическую позицию прокрутки, вы можете использовать getVerticalScroll () :

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
                    + getHorizontalScroll();
            int y = mBgY
                    + getVerticalScroll();
            graphics.drawBitmap(x, y, mBgWidth, mBgHeight, mBgBitmap, 0, 0);
        }
    }
}

альтернативный текст http://img693.imageshack.us/img693/6245/9000.jpg
Образец использования:

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));
        }
    }
}
1 голос
/ 18 сентября 2010

Макс Гонтар в ответ убивает батарею;

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

Поскольку invalidate () приведет к вызову paintBackground (Graphics).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...