2011-11-23 32 views
2

我想创建一个具有三种状态的图片按钮:黑莓:按钮与正常图像,突出重点,按下状态

  • 正常
  • 重点
  • 按下(或“向下”或“主动”无论你怎么称呼它)

正常和聚焦是非常简单的。我使用着名的类BaseButtonField和BitmapButtonField作为基础。我的问题是,

protected boolean trackwheelClick(int status, int time)

不叫。我的按钮从Field延伸,并具有Field.FOCUSABLE | Field.EDITABLE作为样式。我错过了什么?

回答

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

此代码不会执行“活动”或“按下”状态。你没有使用mActive变量。 – donturner

0

当一个字段是“主动”或“压”说明其可视状态设置为Field.VISUAL_STATE_ACTIVE。如果您通过拨打Field.getVisualState()paint()方法中检查此项,则可以更改按钮在按下时的显示方式。