2011-01-31 63 views
0

我使用自定義ListFieldCallback爲BlackBerry應用程序實現了ListField。它運行良好,除了兩個問題:在BlackBerry ListField中繪製邊框

首先,我指定的位圖只繪製在第一行。它並沒有畫在任何其他的行之後(然而,文字畫得很好)。

其次,我想圍繞當前選定的ListField元素繪製藍色邊框。爲此,我重寫了ListField的drawFocus()以不包含任何內容,並且我還將ListField設置爲在navigationMovement()方法上無效()。邊界正在繪製在第一行,但沒有任何其他。任何人都可以找出原因嗎?這裏是我的相關代碼:

的ListField實例:

ListField lf = new ListField() { 
      protected void drawFocus(Graphics graphics, boolean on) { 
      } 

      protected boolean navigationMovement(int dx, int dy, 
        int status, int time) { 
       this.invalidate(this.getSelectedIndex()); 
       return super.navigationMovement(dx, dy, status, time); 
      } 
      protected boolean navigationClick(int status, int time) { 
       return true; 
      } 
     }; 

     lf.setEmptyString("No items.", DrawStyle.HCENTER); 
     _callback = new ListCallback(vector, Bitmap 
       .getBitmapResource("image.png")); 
     lf.setCallback(_callback); 
     add(lf); 

     lf.setSize(vector.size()); 

定製ListField回調:

if (index == list.getSelectedIndex()) { 
     g.setColor(0x4096cc); 
     g.drawBitmap(5, (bitmapHeight - fontHeight) * 2, 
       _bitmap.getWidth(), _bitmap.getHeight(), _bitmap, 0, 0); 
     g.drawText(text, _bitmap.getWidth() + 15, 
       y, 0, w); 
     g.drawRect(0, 0, list.getWidth(), list.getRowHeight()); 
    } else { 
     g.setColor(0x4096cc); 
     g.drawBitmap(5, (bitmapHeight - fontHeight) * 2, 
       _bitmap.getWidth(), _bitmap.getHeight(), _bitmap, 0, 0); 
     g.drawText(text, _bitmap.getWidth() + 15, 
       y, 0, w); 
    } 

謝謝!

回答

1

如果沒有所有的代碼,很難說清楚,但是您的drawText調用使用y值,而其他調用不使用,所以這就解釋了爲什麼它們都在同一個地方進行繪製。

+0

你說得對,修復我的drawBitmap()和drawRect()來利用y就是了。謝謝! – littleK 2011-01-31 17:57:06