Blackberry 4.5 - Как нажать на изображение .jpg? - PullRequest
2 голосов
/ 22 января 2010

Я отображаю изображение .jpg в BitmapField и добавляю его в VerticalFieldManager. Он отображается, но я не могу нажать на него.

Я делаю это как ..

Bitmap bitmap = Bitmap.getBitmapResource("image.jpg");

BitmapField bitmapField = new BitmapField(bitmap , BitmapField.FOCUSABLE)        
    {
        protected boolean navigationClick(int status, int time )
        {
            //handle click event                
            return true;
        }
    };
VerticalFieldManager vfm = new VerticalFieldManager();
vfm.add(bitmapField);
add(vfm_stamp);

Но если я возьму изображение в формате .png, например

Bitmap bitmap = Bitmap.getBitmapResource("image.png");

тогда это кликабельно. Почему так?

Blackberry 4.5 поддерживает формат изображений .jpg. Он отображает изображение .jpg, то почему его нельзя кликнуть? Я хочу сделать это кликабельным.

Как это сделать?

Ответы [ 2 ]

1 голос
/ 22 января 2010

Вы можете переопределить метод onFocus() и изменить его поведение при выборе.

Вы также можете создать BitmapButton, который расширяет net.rim.device.api.ui.Field

Вам понадобится setChangeListener() для вашего bitmapField

0 голосов
/ 23 января 2010

Вы можете расширить ButtonField :

package org.ci.blackberry.ui;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.ButtonField;

public class BitmapButtonField45 extends ButtonField {
        private static final int STATE_NORMAL = 0;
        private static final int STATE_FOCUS = 1;
        private static final int STATE_ACTIVE = 2;
        Bitmap mNormal;
        Bitmap mFocused;
        Bitmap mActive;

        int mWidth;
        int mHeight;
        private int mState = STATE_NORMAL;

        public BitmapButtonField45(Bitmap normal, Bitmap focused, 
                Bitmap active) {
                super(CONSUME_CLICK);
                mNormal = normal;
                mFocused = focused;
                mActive = active;
                mWidth = mNormal.getWidth();
                mHeight = mNormal.getHeight();
        }
        public BitmapButtonField45(Bitmap normal, Bitmap focused) {
                this(normal, focused, focused);
        }
        protected void paint(Graphics graphics) {
                Bitmap bitmap = null;
                switch (getState()) {
                case STATE_NORMAL:
                        bitmap = mNormal;
                        break;
                case STATE_FOCUS:
                        bitmap = mFocused;
                        break;
                case STATE_ACTIVE:
                        bitmap = mActive;
                        break;
                default:
                        bitmap = mNormal;
                }
                graphics.drawBitmap(0, 0, bitmap.getWidth(), bitmap.getHeight(),
                                bitmap, 0, 0);
        }

        public int getState() {
                return mState;
        }

        protected void applyTheme()
        {}
        protected void onFocus(int direction) {
                mState = STATE_FOCUS;
                super.onFocus(direction);
        }

        protected void onUnfocus() {
                mState = STATE_NORMAL;
                super.onUnfocus();
        }

        protected boolean navigationClick(int status, int time) {
                mState = STATE_ACTIVE;
                return super.navigationClick(status, time);
        }

        protected boolean navigationUnclick(int status, int time) {
                mState = STATE_NORMAL;
                return super.navigationUnclick(status, time);
        }

        public int getPreferredWidth() {
                return mWidth;
        }

        public int getPreferredHeight() {
                return mHeight;
        }

        protected void layout(int width, int height) {
                setExtent(getPreferredWidth(), getPreferredHeight());
        }
}

Примеры использования: PuzzleApp.java

...