2010-10-18 84 views
0

我想更改BitmapField圖像onFocus和onUnfocus,並且我需要一個onClick事件。我怎樣才能做到這一點?這是我的代碼,但它正在發起焦點更改事件。BlackBerry BitmapField on focus change and click listener

public class ClickbleImage extends BitmapField { 
    public ClickbleImage(Bitmap bitmap,long style) { 
     super(bitmap,style); 
    } 

    public boolean isFocusable() { 
     return true; 
    } 

    protected boolean navigationClick(int status, int time) { 
     fieldChangeNotify(0); 
     return true; 
    } 

    protected void onFocus(int direction) { 
     this.setBitmap(Bitmap.getBitmapResource("img/editfocus.jpg")); 
     super.onFocus(direction); 
    } 

    protected void onUnfocus() { 
     this.setBitmap(Bitmap.getBitmapResource("img/edit.png")); 
     super.onUnfocus(); 
    } 
} 
+0

你是否檢查過你點擊位圖fiels然後點擊導航點擊 – Swati 2010-12-14 12:56:08

回答

1

我不完全確定你的意思是「它正在發生焦點變化事件」。這不是你想要的嗎?

我上個月在一個自定義的位圖按鈕上工作,最終創建了Field的子類,並自己處理繪圖。我不記得爲什麼BitmapField的子類不起作用,但你可能想看看。你會有更多的控制權。

此外,您需要在onFocusonUnFocus方法中將呼叫添加到invalidate(),因爲這會導致該字段被重新繪製新的位圖。最後,考慮重寫drawFocus()並在該方法內部不做任何操作,因爲這會阻止繪製標準焦點樣式(藍色光暈)。除非你想要,否則如果你有自己的焦點形象,這可能是不可取的。

如果您發佈了一些有關該問題的更多詳細信息,我可以嘗試提供幫助,但我不確定問題所在。

編輯補充:

我看了看我的筆記,發現了這個鏈接,

http://www.thinkingblackberry.com/archives/167

,並在第二次看,還有就是樣品在custombuttonsdemo \ COM \緣\ BB JDE 5.0的樣本\設備\目錄。它基本上實現了該博客文章所描述的內容,這可能會有所幫助。該博客文章描述瞭如何繪製自定義按鈕,而不是使用位圖,但它是一樣的想法。在paint(Graphics g)方法,你會怎麼做

protected void paint(Graphics g) { 
    g.drawBitmap(0,0,getWidth(),getHeight(),bmp,0,0); 
} 

RIM的樣品包括PictureBackgroundButtonField它實現了一個位圖按鈕。這是我用過的,比我上面寫的更詳細。

0
public static Field setImages(final Bitmap bitmap1 , final Bitmap bitmap2){ 

    Field temp = new Field(Field.FOCUSABLE) { 

     protected void paint(Graphics graphics) { 
      if(isFocus()) 
      { 
       graphics.drawBitmap(0, 0, bitmap1.getWidth(), bitmap1.getHeight(), bitmap2, 0, 0); 
      } 
      else 
      { 
       graphics.drawBitmap(0, 0, bitmap1.getWidth(), bitmap1.getHeight(), bitmap1, 0, 0); 
      } 

     } 

     protected void layout(int width, int height) { 
      setExtent(bitmap1.getWidth(), bitmap1.getHeight()); 

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

     } 
     protected void onFocus(int direction) 
     { 
      super.onFocus(direction); 
      invalidate(); 
     } 
     protected void onUnfocus() { 
      super.onUnfocus(); 
      invalidate(); 
     } 
     public boolean isFocusable() 
     { 
      return true; 
     } 
     protected boolean navigationClick(int status, int time) 
     { 
      fieldChangeNotify(1); 
      return true; 
     } 

    }; 
    return temp; 

}