Blackberry bitmapfield焦点未聚焦问题
我在屏幕中添加了三个位图。图像需要随着焦点和非焦点的变化而变化。现在,如果我在自定义方法中声明位图,而不是从一个图像滚动到另一个图像,则会出现空指针异常。但是,当我在方法外声明位图时,我不会得到任何异常,但是只有最后一个聚焦的图像在任何地方都会聚焦,但是对于三个图像,应该是这样的,三个不同的聚焦图像在那里。下面是我的代码。请帮助Blackberry bitmapfield焦点未聚焦问题,blackberry,java-me,Blackberry,Java Me,我在屏幕中添加了三个位图。图像需要随着焦点和非焦点的变化而变化。现在,如果我在自定义方法中声明位图,而不是从一个图像滚动到另一个图像,则会出现空指针异常。但是,当我在方法外声明位图时,我不会得到任何异常,但是只有最后一个聚焦的图像在任何地方都会聚焦,但是对于三个图像,应该是这样的,三个不同的聚焦图像在那里。下面是我的代码。请帮助 private BitmapField getBitmapField(final Item item, final int cellWid, final int ce
private BitmapField getBitmapField(final Item item, final int cellWid, final int cellHgt, final long style) {
final Bitmap bitmap = Bitmap.getBitmapResource(item.imgUrl);
final Bitmap bitmapfoc = Bitmap.getBitmapResource(item.imgUrlimp);
BitmapField bitmapField = new BitmapField(bitmap, style) {
boolean _inFocus = false;
protected void onFocus(int direction) {
_inFocus = true;
selectedIndex = flowFieldManager.getFieldWithFocusIndex();
System.out.println("Selected Index :"+selectedIndex);
if(TextControl.labelField != null)
TextControl.labelField.setText(item.title);
super.onFocus(direction);
//this.invalidate();
}
protected void onUnfocus() {
_inFocus = false;
super.onUnfocus();
//this.invalidate();
}
public void paint(Graphics graphics) {
System.out.println("====barView=== :"+barview);
graphics.drawBitmap(0, 0, bitmap.getWidth(),bitmap.getHeight(), bitmap, 0, 0); //draw bachground image bitmap
invalidate();
//super.paint(graphics);
}
protected void drawFocus(Graphics g, boolean arg1) {
g.drawBitmap(0,0, bitmapfoc.getWidth(), bitmapfoc.getHeight(), bitmapfoc, 0, 0); //draw bachground image bitmap
invalidate();
}
与您的问题无关,但您不应该从绘制方法内部调用
invalidate()
,因为invalidate()
表示需要重新绘制。你能给我们一些有用的信息吗,比如NPE在哪里被抛出?在这个方法中,你给两个图像名称,一个是原始的,另一个是更改的。drawFocus()移除焦点的效果。Onfocus给更改图像,unfocus给原始图像。享受。。。。
BitmapField chaneBitmap(String image1,String image2){
final Bitmap original= Bitmap.getBitmapResource(image1);
final Bitmap change = Bitmap.getBitmapResource(image2);
BitmapField _hold_bitmap=new BitmapField(original,BitmapField.FOCUSABLE){
protected void drawFocus(Graphics graphics, boolean on){}
public void onFocus(int direction){
invalidate();
setBitmap(change);
}
public void onUnfocus(){
super.onUnfocus();
setBitmap(original);
}
}
}