我已使用自定义ListFieldCallback为我的BlackBerry应用程序实现了ListField。它运作良好,但有两个问题除外:
首先,我指定的位图仅在第一行绘制。它不会在下面的任何其他行中绘制(但是文本绘制正常)。
其次,我想在当前选定的ListField元素周围绘制一个蓝色边框。为此,我重写了ListField的drawFocus()以包含任何内容,并且我还将listField设置为navigationMovement()方法的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);
}
谢谢!
答案 0 :(得分:1)
很难在没有所有代码的情况下确切地说出来,但是你的drawText调用使用y值而其他调用没有,所以这就解释了为什么他们都在同一个地方绘图。