import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Graphics;
public class CustomeImageButton extends Field {
private Bitmap button;
private Bitmap on, off;
private int fieldWidth;
private int fieldHeight;
private int buffer = 1;
private static boolean focus;
public CustomeImageButton(String _on, String _off) {
super(Field.FOCUSABLE);
on = Bitmap.getBitmapResource(_on);
off = Bitmap.getBitmapResource(_off);
button = off;
fieldWidth = button.getWidth() + 2;
fieldHeight = button.getHeight() + 5;
}
public CustomeImageButton(String _text, Bitmap _on, Bitmap _off) {
super(Field.FOCUSABLE);
on = _on;
off = _off;
button = off;
fieldWidth = button.getWidth() + 2;
fieldHeight = button.getHeight() + 5;
}
protected boolean navigationClick(int status, int time) {
fieldChangeNotify(1);
return true;
}
protected void onFocus(int direction) {
focus = true;
button = on;
invalidate();
}
protected void onUnfocus() {
focus = false;
button = off;
invalidate();
}
public int getPreferredWidth() {
return fieldWidth;
}
public int getPreferredHeight() {
return fieldHeight;
}
protected void layout(int arg0, int arg1) {
setExtent(getPreferredWidth(), getPreferredHeight());
}
public static boolean isFocused() {
return focus;
}
protected void drawFocus(Graphics graphics, boolean on) {
}
protected void paint(Graphics graphics) {
graphics.drawBitmap(buffer, 4, fieldWidth, fieldHeight, button, 0, 0);
}
public boolean isFocus() {
return focus;
}
}
Now add this button on MainScreen
add(new CustomeImageButton("img/play_on.png", "img/play_off.png"));
add(new CustomeImageButton("img/play_on.png", "img/play_off.png"));
Now here following screen display two button. Both are same but one button focus got and another is focus lost.

thnx , you saved me from a big headache
ReplyDeletenice example, i wonder if u have more with layout and listeners for button
ReplyDelete