Инициировать paint (), когда вызывается onUnfocus () - PullRequest
0 голосов
/ 24 февраля 2011

Когда вызывается метод onFocus(), следует ли начинать перерисовку? Ниже находится кнопка, которая, если она выбрана, представляет собой другой фоновый рисунок, и если выбрана другая кнопка, новый фоновый рисунок должен быть нарисован. Но этого не происходит, после выбора кнопка остается с ее растровым изображением, даже когда она не фокусируется.

Вот как я звоню onUnFocus():

        protected void onUnfocus() {
            this.setHighlight(false);
            super.onUnfocus();

        }

Вот мой полный класс:

/**
 * Button field with a bitmap as its label.
 */
public class SelectQuizTypeButtonField extends BitmapButtonField {
        private Bitmap backgroundBitmap;
        private Bitmap backgroundBitmapHighlight;
        private Bitmap contestantImageBitmap;
        private Bitmap statusBitmap;
        private Bitmap costBitmap;
        private Bitmap timerBitmap;
        private boolean highlighted = false;
        private String label;
        private Font font;
        private Graphics graphics;
        /**
         * Instantiates a new bitmap button field.
         * 
         * @param backgroundBitmap the bitmap to use as a label
         */
        public SelectQuizTypeButtonField(
                Bitmap backgroundBitmap, 
                Bitmap backgroundBitmapHighlight, 
                Bitmap contestantImageBitmap,
                Bitmap costBitmap,
                Bitmap statusBitmap, 
                Bitmap timerBitmap,
                String label, int width, Font font) {
            this(backgroundBitmap, backgroundBitmapHighlight, ButtonField.CONSUME_CLICK|ButtonField.FIELD_HCENTER|ButtonField.FIELD_VCENTER
                    , label, width, font, contestantImageBitmap, statusBitmap,
                    costBitmap, timerBitmap);

        }



        public SelectQuizTypeButtonField(Bitmap backgroundBitmap, 
                Bitmap backgroundBitmapHighlight, long style, 
                String label, int width, Font font, Bitmap contestantImageBitmap, 
                Bitmap statusBitmap, Bitmap costBitmap, Bitmap timerBitmap) {
            super(backgroundBitmap , backgroundBitmapHighlight);
            this.backgroundBitmap = backgroundBitmap;
            this.backgroundBitmapHighlight = backgroundBitmapHighlight;
            this.label = label;
            this.font = font;
            this.contestantImageBitmap = contestantImageBitmap;
            this.statusBitmap = statusBitmap;
            this.costBitmap = costBitmap;
            this.timerBitmap = timerBitmap;
        }

        protected void onFocus(int direction) {

            this.setHighlight(true);
            super.onFocus(direction);

            }

            protected void onUnfocus() {
                this.setHighlight(false);
                super.onUnfocus();

            }
        /* (non-Javadoc)
         * @see net.rim.device.api.ui.component.ButtonField#layout(int, int)
         */
        protected void layout(int width, int height) {
                setExtent(getPreferredWidth(), getPreferredHeight());
        }

        /* (non-Javadoc)
         * @see net.rim.device.api.ui.component.ButtonField#getPreferredWidth()
         */
        public int getPreferredWidth() {
                return backgroundBitmap.getWidth();
        }

        /* (non-Javadoc)
         * @see net.rim.device.api.ui.component.ButtonField#getPreferredHeight()
         */
        public int getPreferredHeight() {
                return backgroundBitmap.getHeight();
        }

        /* (non-Javadoc)
         * @see net.rim.device.api.ui.component.ButtonField#paint(net.rim.device.api.ui.Graphics)
         */
        protected void paint(Graphics graphics) {

                this.graphics = graphics;
                int width = backgroundBitmap.getWidth();
                int height = backgroundBitmap.getHeight();
                Bitmap backgroundBitM = backgroundBitmap;
                if (highlighted)
                    backgroundBitM = backgroundBitmapHighlight;

                graphics.fillRoundRect(0, 0, width, height, 10, 10);  
                graphics.drawBitmap(0, 0, width, height, backgroundBitM, 0, 0);

                int quarter = backgroundBitM.getHeight() / 4;
                graphics.drawBitmap(10, 10, contestantImageBitmap.getWidth(), contestantImageBitmap.getHeight(), contestantImageBitmap, 0, 0);
                graphics.drawBitmap(80, quarter*2, costBitmap.getWidth(), costBitmap.getHeight(), costBitmap ,0, 0);
              //  graphics.drawBitmap(30, quarter*3, width, height, timerBitmap, 0, 0);
                graphics.drawBitmap(backgroundBitM.getWidth()-statusBitmap.getWidth(), 0, width, height, statusBitmap, 0, 0);
                graphics.setFont(font);
                graphics.drawText(label, 0, backgroundBitmap.getHeight());  

        }


        public void setHighlight(boolean highlight)
        {
            this.highlighted = highlight;      
        }

        protected void drawFocus( Graphics g, boolean on ) {
            // Paint() handles it all
            g.setDrawingStyle( Graphics.DRAWSTYLE_FOCUS, true );
            paintBackground( g );
            paint( g );
        }
}

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Вы пытались вызвать метод invalidate ()?Этот метод заставляет экран или поле перерисовываться во время выполнения.попробуйте добавить его в свой метод unFocus, например так:

    protected void onUnfocus() {
        this.setHighlight(false);
        invalidate();
        super.onUnfocus();
    }
0 голосов
/ 23 ноября 2011

Вы также можете сделать это в вашем drawFocus методе. Вот почему он имеет параметр boolean on.

protected void drawFocus( Graphics g, boolean on ) {
    // Paint() handles it all
    if (on) {
        g.setDrawingStyle( Graphics.DRAWSTYLE_FOCUS, true );
    } else {
        g.setDrawingStyle( Graphics.DRAWSTYLE_FOCUS, false );
    }
    // Or to keep it short: 
    g.setDrawingStyle( Graphics.DRAWSTYLE_FOCUS, on );

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