BlackBerry BitmapField用于焦点更改和单击侦听器

时间:2010-10-18 07:55:46

标签: java blackberry

我想更改onFocus和onUnfocus上的BitmapField图像,我需要一个onClick事件。我怎样才能做到这一点?这是我的代码,但它正在激活焦点变化的事件。

public class ClickbleImage extends BitmapField {
    public ClickbleImage(Bitmap bitmap,long style) {
        super(bitmap,style);
    }

    public boolean isFocusable() {
        return true;
    }

    protected boolean navigationClick(int status, int time) {
       fieldChangeNotify(0);
       return true;
    }

    protected void onFocus(int direction) {
       this.setBitmap(Bitmap.getBitmapResource("img/editfocus.jpg"));
       super.onFocus(direction);
    }

    protected void onUnfocus() {
       this.setBitmap(Bitmap.getBitmapResource("img/edit.png"));
       super.onUnfocus();
    }
}

2 个答案:

答案 0 :(得分:1)

我不完全确定你的意思是“它正在解决焦点变化的事件。”这不是你想要的吗?

我上个月在自定义Bitmap按钮上工作,最后创建了Field的子类,并自己处理绘图。我不记得为什么BitmapField的子类不起作用,但你可能想看一下。你会有更多的控制权。

此外,您需要在invalidate()onFocus方法中添加对onUnFocus的调用,因为这会导致使用新的位图重新绘制字段。最后,考虑覆盖drawFocus()并在该方法中不执行任何操作,因为这将阻止绘制标准焦点样式(蓝色光环)。除非你想要,但如果你有自己的焦点图像,那可能是不受欢迎的。

如果您发布有关此问题的更多详细信息,我可以尝试提供帮助,但我不确定问题是什么。

编辑添加:

我查看了我的笔记并找到了这个链接,

http://www.thinkingblackberry.com/archives/167

第二次看,BB JDE 5.0的samples \ com \ rim \ samples \ device \目录中有一个custombuttonsdemo。它基本上实现了博客文章描述的内容,它可能会有所帮助。该博客文章描述了绘制自定义按钮,而不是使用位图,但它是相同的想法。在paint(Graphics g)方法中,您可以

protected void paint(Graphics g) {
    g.drawBitmap(0,0,getWidth(),getHeight(),bmp,0,0);
}

RIM示例包含PictureBackgroundButtonField,它实现了一个位图按钮。这是我使用的,并且比我上面写的更详细。

答案 1 :(得分:0)

 public static Field setImages(final Bitmap bitmap1 , final Bitmap bitmap2 ){

    Field temp = new Field(Field.FOCUSABLE) {

        protected void paint(Graphics graphics) {
            if(isFocus())
            {
                graphics.drawBitmap(0, 0, bitmap1.getWidth(), bitmap1.getHeight(), bitmap2, 0, 0);
            }
            else
            {
                graphics.drawBitmap(0, 0, bitmap1.getWidth(), bitmap1.getHeight(), bitmap1, 0, 0);
            }

        }

        protected void layout(int width, int height) {
            setExtent(bitmap1.getWidth(), bitmap1.getHeight());

        }
        protected void drawFocus(Graphics graphics, boolean on)
        {

        } 
        protected void onFocus(int direction)
        {
            super.onFocus(direction);
            invalidate();
        }
        protected void onUnfocus() {
            super.onUnfocus();
            invalidate();
        }
        public boolean isFocusable() 
        {
            return true;
        }
        protected boolean navigationClick(int status, int time) 
        {
            fieldChangeNotify(1);
            return true;
        }

    };
    return temp;

}