BlackBerry: кнопка с изображениями для нормального, сфокусированного и нажатого состояния - PullRequest
2 голосов
/ 23 ноября 2011

Я хотел бы создать кнопку изображения с тремя состояниями:

  • Нормальный
  • Focused
  • Нажата (или «вниз» или «активна», как вы это называете)

Обычный и Сосредоточенный довольно прост. В качестве основы я использовал известные классы BaseButtonField и BitmapButtonField. Моя проблема в том, что

protected boolean trackwheelClick(int status, int time)

не называется. Моя кнопка начинается с Field и имеет Field.FOCUSABLE | Field.EDITABLE в качестве стилей. Чего мне не хватает?

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

Вы можете попробовать с «Учебник: Создание пользовательской кнопки» официальных документов RIM.

Я думаю, это то, что вы ищете

1 голос
/ 23 ноября 2011

Приведенный ниже код представляет собой настраиваемое поле кнопки для нижней строки меню.Это будет полезно для вашей задачи.

public class PictureBackgroundButtonField extends BitmapField {

    MyTooltip _tooltip;
    Bitmap mNormal;
    Bitmap mFocused;
    Bitmap mActive;
    String text;
    int mWidth;
    int mHeight;
    int xpos1;

    public PictureBackgroundButtonField(String text,Bitmap normal, Bitmap focused, int xpos) 
    {
        super(normal,FOCUSABLE);
        mNormal = normal;
        mFocused = focused;
        mWidth = mNormal.getWidth();
        mHeight = mNormal.getHeight();
        this.text=text;
        setMargin(0, 0, 0, 0);
        setPadding(0, 0, 0, 0);
        xpos1 = xpos;
    }

    public String getText()
    {
        return text;
    }

    public void setText(String text)
    {
        this.text=text;
    }

    protected void paint(Graphics graphics) {
        Bitmap bitmap = mNormal;

        if(isFocus())
        {
            bitmap = mFocused;
        }
        else
        {
            bitmap = mNormal;
        }

        graphics.drawBitmap(0, 0, bitmap.getWidth(), bitmap.getHeight(), bitmap, 0, 0); 
    }

    protected void drawFocus(Graphics graphics, boolean on) {
    }

    protected void onFocus(int direction) {

        //lbt.setText(text);
        invalidate();
        super.onFocus(direction);
        if ( _tooltip != null ) {
            _tooltip.removeToolTip();
            _tooltip = null;
        }

        // Display tooltip at 50,50 for 5 seconds
        _tooltip = MyTooltip.addToolTip(UiApplication.getUiApplication(), text, xpos1, 270, 1);
    }

    protected void onUnfocus() {
        //lbt.setText("");
        invalidate();
        super.onUnfocus();
        if ( _tooltip != null ) {
            // We have displayed a Tooltip - remove it
            _tooltip.removeToolTip();
            _tooltip = null;
        }
    }

    public int getPreferredWidth() {
        return mWidth;
    }

    public int getPreferredHeight() {
        return mHeight;
    }

    protected void layout(int width, int height) {
        setExtent(mWidth, mHeight);
    }
} 
0 голосов
/ 24 ноября 2011

Когда поле находится в активном или нажатом состоянии, его визуальное состояние установлено на Field.VISUAL_STATE_ACTIVE. Если вы проверите это в своем методе paint(), вызвав Field.getVisualState(), вы сможете изменить способ отображения кнопки при ее нажатии.

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