1

完全に機能するカスタム ビットマップ ボタンフィールドがありますが、画像の背景に白い四角形が表示されています。色が白くなる場所を見つけましたが、完全に透明にする方法がわかりません。何か案は?ブラックベリーJava JDE 5.0でプログラミングしています

参考までに、ボタンの画像は、角に透明度を使用した角の丸い png ファイルです。

コード:

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;
    }
}
4

3 に答える 3

0

paint()メソッドがdrawARGBを使用して画面にビットマップを描画していることを確認してください。「BlackBerryでビットマップをスケーリングしてアルファを保持する」という同様の問題がありましたが、drawRGBとdrawBitmapはアルファチャネルを使用しないため、何も透明にしないことがわかりました。

于 2012-04-23T00:41:36.970 に答える
0

あなたが使用している

graph.setColor(Color.WHITE);

 graph.fillRect(0, 0, getWidth(), getHeight());

白い長方形を作成するコード内のメソッド(paint()およびpaintBackground()メソッド内)。

このコードを削除する必要があると思います。

それでも問題が見つからない場合は、別のカスタムBitmapFieldの例を提供します。

于 2012-04-23T07:31:37.670 に答える
0

実装しました

protected void drawFocus(Graphics g, boolean on)

protected void paintBackground(Graphics g)

また、フォーカス状態の背景画像も指定しました。paintBackground()との実装を削除できますdrawFocus()。また、グラフィックスの色を白に設定して四角形を塗りつぶす行は、メソッド paint から削除できます。つまり、ペイント メソッドでビットマップ イメージをペイントするだけで済みます。ここでコードを変更しました。確認できます(テストしていません)。

于 2012-04-23T23:00:54.497 に答える