2011-11-23 44 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()方法中檢查此項,則可以更改按鈕在按下時的顯示方式。