我想更改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();
}
}
答案 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;
}