2011-01-31 8 views
0

私は、カスタムListFieldCallbackを使用してBlackBerryアプリケーションのListFieldを実装しました。BlackBerry ListFieldの枠線の描画

まず、指定されたビットマップは最初の行にのみ描画されます。次の行には描画されません(ただし、テキストは上手く描画されます)。

第2に、現在選択されているListField要素の周りに青い枠線を描きたいと思います。これを行うために、ListFieldのdrawFocus()を何も含まないようにオーバーライドしました。また、NavigationMovement()メソッドでListFieldをinvalidate()に設定しました。ボーダーは最初の行に描画されますが、他の行は描画されません。なぜ誰かが理解できますか?

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値が使用されていますが、他の呼び出しではy値が使用されていないので、すべてのコードが同じ位置に描画されている理由がわかります。

+0

あなたは正しいです、私のdrawBitmap()とdrawRect()を利用して、yを使ったことをやりました。ありがとうございました! – littleK