0

This is the original button image. The background of the button was transparent.

When apply into apps, the button look like this. Please look at top left the button. The background of the button became gray instead of transparent.

Here is the Android version's button.

Not only the button but also all same type of buttons which background was transparent.

The custom_buttonfield

public class Custom_ButtonField extends ButtonField {
Bitmap mNormal;
Bitmap mFocused;
Bitmap mActive;

int mWidth;
int mHeight;

private int color = -1;
String text;

public Custom_ButtonField(Bitmap normal, Bitmap focused, Bitmap active) {
    super(CONSUME_CLICK | Field.FOCUSABLE | Field.FIELD_HCENTER
            | Field.FIELD_VCENTER);
    mNormal = normal;
    mFocused = focused;
    mActive = active;
    mWidth = mNormal.getWidth();
    mHeight = mNormal.getHeight();
    setMargin(0, 0, 0, 0);
    setPadding(0, 0, 0, 0);
    setBorder(BorderFactory.createSimpleBorder(new XYEdges(0, 0, 0, 0)));
    setBorder(VISUAL_STATE_ACTIVE,
            BorderFactory.createSimpleBorder(new XYEdges(0, 0, 0, 0)));
}

public Custom_ButtonField(String text, Bitmap normal, Bitmap focused,
        Bitmap active, int color) {
    super(CONSUME_CLICK | Field.FOCUSABLE | Field.FIELD_HCENTER
            | Field.FIELD_VCENTER);
    this.color = color;
    mNormal = normal;
    mFocused = focused;
    mActive = active;
    mWidth = mNormal.getWidth();
    mHeight = mNormal.getHeight();
    setMargin(0, 0, 0, 0);
    setPadding(0, 0, 0, 0);
    setBorder(BorderFactory.createSimpleBorder(new XYEdges(0, 0, 0, 0)));
    setBorder(VISUAL_STATE_ACTIVE,
            BorderFactory.createSimpleBorder(new XYEdges(0, 0, 0, 0)));
    this.text = text;
}

protected void onFocus(int direction) {
    super.onFocus(direction);
}

protected void onUnfocus() {
    super.onUnfocus();
}

protected void paint(Graphics graphics) {   
    int fontcontent;
    if (Display.getWidth() > 480)
        fontcontent = 28;
    else if (Display.getWidth() < 481 && Display.getWidth() > 320)
        fontcontent = 23;
    else
        fontcontent = 18;

    Bitmap bitmap = null;
    switch (getVisualState()) {
    case VISUAL_STATE_NORMAL:
        bitmap = mNormal;
        break;
    case VISUAL_STATE_FOCUS:
        bitmap = mFocused;
        break;
    case VISUAL_STATE_ACTIVE:
        bitmap = mActive;
        break;
    default:
        bitmap = mNormal;
    }
    graphics.drawBitmap(0, 0, bitmap.getWidth(), bitmap.getHeight(),
            bitmap, 0, 0);
    graphics.setFont(Font.getDefault().derive(Font.BOLD, fontcontent));
    graphics.setColor(color);
    graphics.drawText(text, (mNormal.getWidth() - Font.getDefault()
            .getAdvance(text)) / 2, ((mNormal.getHeight() - Font
            .getDefault().getHeight()) / 2) + 10, DrawStyle.HCENTER
            | DrawStyle.VCENTER);
}

public int getPreferredWidth() {
    return mWidth;
}

public int getPreferredHeight() {
    return mHeight;
}

protected void layout(int width, int height) {
    setExtent(mWidth, mHeight);
}
}

The loader is here

private Bitmap news = Config_GlobalFunction.Bitmap("icon_news.png");
private Bitmap newsactive = Config_GlobalFunction
        .Bitmap("icon_news_active.png");

if (left == 1) {
        newsbtn = new Custom_ButtonField(news, newsactive, newsactive) {
            protected boolean navigationClick(int status, int time) {
                Main.getUiApplication().pushScreen(
                        new Menu_PopupMenu(thisid));
                return true;
            }
        };

        add(newsbtn);
    } else if (left == 2) {
        backbtn = new Custom_ButtonField(back, backctive, backctive) {
            protected boolean navigationClick(int status, int time) {
                Main.getUiApplication().popScreen(mainscreen);
                return true;
            }
        };
        add(backbtn);
    }

if (left == 1) {
        field = getField(1);
        layoutChild(field, back.getWidth(), back.getHeight());
        setPositionChild(field, 10, Height);
    } else if (left == 2) {
        field = getField(1);
        layoutChild(field, news.getWidth(), news.getHeight());
        setPositionChild(field, 10, Height);
    }

if I set like this layoutChild(field, 60, 60);, then it got no problem, the behind gray color no more. However, I cannot set fixed and must dynamic size.

Alan Lai
  • 1,296
  • 2
  • 12
  • 16

2 Answers2

1

call this setBackground(BackgroundFactory.createBitmapBackground(bitmap)); instead of graphics.drawBitmap(0, 0, bitmap.getWidth(), bitmap.getHeight(), bitmap, 0, 0); in Custom_ButtonField.

Alan Lai
  • 1,296
  • 2
  • 12
  • 16
  • 1
    You can Accept your own answer, so everyone knows that this problem has been solved. Thanks! – Nate Jul 20 '12 at 02:51
0

I can't see the actual code that's loading the Bitmap objects, but I know you were discussing it in the other question you posted. Try this:

Config_GlobalFunction.java:

public static Bitmap Bitmap(String name) {
    Bitmap result;

    // do whatever you do to load the Bitmap (e.g. Bitmap.getBitmapResource(name))

    result.createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
    return result;
}
Nate
  • 31,017
  • 13
  • 83
  • 207
  • it became more worst instead of transparent. – Alan Lai Jul 19 '12 at 08:32
  • @AlanLai, can you post the actual image you are using, that's having problems? Not a **screenshot** of the image. Just take the exact image (.png file) that you use for this button, and put it on a website, and then post a link to it in the question. Different images have different properties, so there could be different reasons why this isn't working. But, I think I would need to have the actual PNG file that you're using. Thanks! – Nate Jul 19 '12 at 08:44
  • the problem I found which was `drawbitmap`. This method will draw the bitmap. Then I use `setbackground()` it works what I want. – Alan Lai Jul 19 '12 at 09:52