BlackBerry:带有图像的按钮,用于正常,聚焦和按下状态

时间:2011-11-23 11:57:10

标签: blackberry button user-interface

我想创建一个有三种状态的图像按钮:

  • 正常
  • 聚焦
  • 按下(或“向下”或“有效”无论你怎么称呼它)

正常和专注非常简单。我使用着名的类BaseButtonField和BitmapButtonField作为基础。我的问题是那个

protected boolean trackwheelClick(int status, int time)

未被调用。我的按钮从Field延伸,并以Field.FOCUSABLE | Field.EDITABLE作为样式。我错过了什么?

3 个答案:

答案 0 :(得分:2)

您可以尝试使用"Tutorial: Creating a custom button"官方RIM文档。

我认为这就是你要找的东西

答案 1 :(得分:1)

以下代码是底部菜单栏的自定义按钮字段。这对您的任务很有用。

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);
    }
} 

答案 2 :(得分:0)

当某个字段处于“有效”或“已按下”状态时,其可视状态将设置为Field.VISUAL_STATE_ACTIVE。如果您通过调用paint()Field.getVisualState()方法中检查此内容,则可以更改按下按钮时的显示方式。