カスタムボタンを作成したい。このボタンにはグラデーションと 2 ピクセルの境界線が必要ですが、内側と外側のエッジは異なる色にする必要があります (例: 内側は赤、外側は黄色)。
私の質問: 二重境界線 (画像のように) をプログラムするにはどうすればよいですか?!
画像:
2 ストロークの XML ファイルで試しましたが、うまくいきません。
9png ファイルでこれを行うこともできますが、純粋なコーディングで行いたいと考えています。
プレーンな 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));
ボタン専用に作成するレイアウト内にボタンを配置します。そのため、必要な外側の背景色をレイアウトに設定します。