私は完全に動作するカスタムビットマップボタンフィールドを持っていますが、画像の背景が白い四角形を表示しています。私はそれが色を白くする場所を見つけましたが、完全に透明にする方法を理解することはできません。何か案は?私は角にFYIボタン画像は、透明性を使用して丸みを帯びた角のpngファイルでのBlackBerry Java JDE 5.0カスタムビットマップボタンのフィールドを透明な背景にするにはどうすればよいですか?
でのプログラミングだ
コード:
public class BitmapButtonField extends Field
{
Bitmap _currentPicture;
private Bitmap _onPicture;
Bitmap _offPicture;
private int id;
public BitmapButtonField (Bitmap onImage, Bitmap offImage)
{
super(Field.FOCUSABLE|Field.FIELD_HCENTER);
_offPicture = offImage;
_onPicture = onImage;
_currentPicture = _onPicture;
}
public void setButtonImage (Bitmap onImage, Bitmap offImage)
{
_offPicture = offImage;
_onPicture = onImage;
_currentPicture = _onPicture;
}
public void setButtonId(int id)
{
this.id = id;
}
public int getButtonId()
{
return this.id;
}
public int getPreferredHeight()
{
return _onPicture.getHeight();
}
public int getPreferredWidth()
{
return _onPicture.getWidth();
}
protected void onFocus(int direction)
{
_currentPicture = _offPicture;
invalidate();
}
protected void onUnfocus()
{
_currentPicture = _onPicture;
invalidate();
}
protected void drawFocus(Graphics g, boolean on)
{
g.setBackgroundColor(Color.BLACK);
}
protected void layout(int width, int height)
{
setExtent(Math.min(width, getPreferredWidth()), Math.min(
height, getPreferredHeight()));
}
protected void paintBackground(Graphics g) {
int prevColor = g.getColor();
int prevAlpha = g.getGlobalAlpha();
g.setColor(Color.YELLOW);
g.setGlobalAlpha(0);
g.fillRect(0, 0, getWidth(), getHeight()); // or g.getClippingRect()
g.setColor(prevColor);
g.setGlobalAlpha(prevAlpha);
}
protected void paint (Graphics graph){
graph.setColor(Color.WHITE);
//super.paint(graph);
graph.fillRect(0, 0, getWidth(), getHeight());
graph.drawBitmap(0, 0, getWidth(), getHeight(),
_currentPicture, 0, 0);
}
protected boolean navigationClick(int status, int time)
{
fieldChangeNotify(0);
return true;
}
public boolean keyChar(char key, int status, int time)
{
if (key == Characters.ENTER)
{
fieldChangeNotify(0);
return true;
}
return false;
}
}
あなたは 'protected void drawFocus(Graphics g、boolean on)'と 'protected void paintBackground(Graphics g)'を実装しました。また、フォーカスされた状態の背景画像も指定しています。 'paintBackground'と' drawFocus'の実装を削除することができます。また、グラフィックスの色を白に設定し、四角形を塗りつぶす行は、 'paint'メソッドから削除することができます。つまり、 'paint'メソッドでのみビットマップイメージをペイントする必要があります。私はここであなたのコードを修正しました、http://pastebin.com/g9n8bqYc。あなたはそれを確認することができます(私はそれをテストしていない)。 – Rupak
完璧に機能したRupak!本当にありがとう。私はここであなたに名誉を与えようとしていますが、私に許してくれません:( –