кнопка android с двойной границей и градиентом

Я хочу создать пользовательскую кнопку. Эта кнопка должна иметь градиент и двухпиксельную границу, но внутренний и внешний края должны быть другого цвета (например: внутренний красный и внешний желтый).

мой вопрос: как запрограммировать двойную границу (как на изображении)?!

изображение:

Example Button Image

Я пробовал с XML-файлом с двумя штрихами, но он не работает.

Я мог бы сделать это с файлом 9png, но я хочу сделать это с чистым кодированием.

3 ответов


btn_bg.в XML

 <?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item > 
    <shape android:shape="rectangle">

       <padding android:left="3.5px"
            android:top="3.5px"
            android:right="3.5px"
            android:bottom="3.5px"/>

       <solid android:color="#d4e23a"/>

    </shape>
</item>
<item > 
    <shape android:shape="rectangle">

       <padding android:left="4.5px"
            android:top="4.5px"
            android:right="4.5px"
            android:bottom="4.5px"/>

        <solid android:color="#d4413a"/>

    </shape>
</item>
<item > 
    <shape android:shape="rectangle">
        <gradient android:startColor="#37c325"
            android:endColor="#2573c3"
            android:angle="-90"/>

    </shape>
</item>


</layer-list>

установите вышеуказанный xml в качестве фона кнопки.

           <Button

                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:background="@drawable/btn_bg"
                android:gravity="center"
                android:padding="10dp"
                android:textStyle="bold"
                >

           </Button>

результат:

Image


Если вы хотите перейти на простой Java-код, вам нужно создать класс, который расширяет кнопку, напишите всю свою логику в

public void onDraw(Canvas iCanvas).

я вставил небольшой фрагмент кода из одного из моих проектов. Попробуй. думал, что я не создал градиент, я использовал простые цвета.

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));

поместите кнопку внутри макета, который вы создадите только для него. Так установить на макет outest цвет фона, что вы хотите.