8

カスタムボタンを作成したい。このボタンにはグラデーションと 2 ピクセルの境界線が必要ですが、内側と外側のエッジは異なる色にする必要があります (例: 内側は赤、外側は黄色)。

私の質問: 二重境界線 (画像のように) をプログラムするにはどうすればよいですか?!

画像:

ボタン画像の例

2 ストロークの XML ファイルで試しましたが、うまくいきません。

9png ファイルでこれを行うこともできますが、純粋なコーディングで行いたいと考えています。

4

3 に答える 3

1

プレーンな Java コードを使用する場合は、ボタンを拡張するクラスを作成する必要があります。すべてのロジックを

public void onDraw(Canvas iCanvas).

プロジェクトの 1 つから小さなコード スニペットを貼り付けました。試してみる。グラデーションを作成していないと思ったので、無地の色を使用しました。

public class MyButton extends Button {

    private Paint m_paint1 = new Paint();
    private Paint m_paint2 = new Paint();
    private int m_color1 = 0XFF92C84D; // LIKE AN OLIVE GREEN..
    private int m_color2 = 0XFFFF0000; // LIKE AN OLIVE GREEN..

    private RectF innerRect1, innerRect2;

    public MyButton(Context context) {
        super(context);
        setBackgroundColor(Color.BLACK);

    }

    public void onDraw(Canvas iCanvas) {
        // draw the button background
        m_paint1.setColor(m_color1);
        m_paint2.setColor(m_color2);
        innerRect1 = new RectF(5, 5, getWidth() - 5, getHeight() - 5);
        innerRect2 = new RectF(10, 10, getWidth() - 10, getHeight() - 10);
        iCanvas.drawRoundRect(innerRect1, 0, 0, m_paint1);
        iCanvas.drawRoundRect(innerRect2, 0, 0, m_paint2);
    }

    public static RelativeLayout.LayoutParams GetRelativeParam(int iLeft,
            int iTop, int iWidth, int iHeight) {
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                iHeight, iWidth);
        params.leftMargin = iLeft;
        params.topMargin = iTop;
        return params;
    }
}

RelativeLayout relLay = new RelativeLayout(this);

        MyButton m_button = new MyButton(this);
        setContentView(relLay);

        relLay.addView(m_button, MyButton.GetRelativeParam(0, 0, 100, 500));
于 2013-10-17T13:20:33.407 に答える
0

ボタン専用に作成するレイアウト内にボタンを配置します。そのため、必要な外側の背景色をレイアウトに設定します。

于 2013-10-17T12:42:33.033 に答える