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);
}
おかげでここに私の関連するコードです!
あなたは正しいです、私のdrawBitmap()とdrawRect()を利用して、yを使ったことをやりました。ありがとうございました! – littleK