我的屏幕背景图像的呈现方式如下:
bg = new VerticalFieldManager(
VerticalFieldManager.USE_ALL_WIDTH |
VerticalFieldManager.USE_ALL_HEIGHT |
VerticalFieldManager.NO_HORIZONTAL_SCROLLBAR |
VerticalFieldManager.NO_VERTICAL_SCROLLBAR |
VerticalFieldManager.NO_HORIZONTAL_SCROLL |
VerticalFieldManager.NO_VERTICAL_SCROLL) {
//Override the paint method to draw the background image.
public void paint(Graphics graphics) {
//Draw the background image and then call paint.
graphics.drawBitmap(Graphics.getScreenWidth()/2 - bgBitmap.getWidth()/2,
Graphics.getScreenHeight()/2 - bgBitmap.getHeight()/2,
bgBitmap.getWidth(), bgBitmap.getHeight(), bgBitmap, 0, 0);
super.paint(graphics);
}
};
add(bg);
然后我将屏幕的任何字段添加到此经理。我有一个ListField,我想看看背景。首次渲染屏幕时,一切都很顺利。我可以看到图像。只要我向下滚动,选择一些并取消选择它,背景就会消失(变成白色)。
在绘制列表行时是否需要做一些特殊的事情,以便在选择颜色消失后使它们真正透明?
注意:我发现无论在背景上绘制什么字段,都会发生这种情况。它会正确显示,直到为给定的可聚焦字段绘制选择颜色,然后您选择其他内容。所有填充了选择颜色的区域在取消选择后变为默认白色。
答案 0 :(得分:1)
在onfocus()和onunfocus()方法中使用invalidate()函数。
例如,如果您使用LabelField,请使用:
LabelField l=new LabelField("Hello",FOCUSABLE)
{
protected void onFocus(int direction)
{
invalidate();
super.onFocus(direction);
}
protected void onUnfocus()
{
invalidate();
super.onUnfocus();
}
};
答案 1 :(得分:0)
我最终在我的自定义ListField中覆盖了moveFocus()。
public int moveFocus(int amount, int status, int time) {
invalidate(getSelectedIndex());
return super.moveFocus(amount, status, time);
}
Vivek的方法适用于ListField行之外的单个字段。