前言

上一篇文章介绍了如何添加按钮的点击阴影效果,这篇主要是定制按钮的圆角问题。其实也不难只是做多了一个属性控制而已。


添加一个enum类型的属性

<declare-styleable name="MaterialButton">
    <attr name="rectRadius" format="dimension"></attr>
    <attr name="backgroundColor" format="color"></attr>
    <attr name="radiusType" format="enum">
        <enum name="none" value="1"/>
        <enum name="top_radius" value="2"/>
        <enum name="bottom_radius" value="3"/>
        <enum name="all" value="4"/>
    </attr>
</declare-styleable>

这个是这个自定义按钮的自定义属性。前两个分别是圆角半径、背景颜色。第三个就是设置圆角的类型。这个enum类型的属性其实有个很常见的例子,就是LinearLayout的orientation属性就是enum类型的。
这里说明一下:
none:无圆角
top_radius:左上和右上有圆角
bottom_radius:左下和右下有圆角
all:四角都为圆角
这里暂定这四种情况,以后有需要可以再作修改。


在代码中解析该属性

在代码中定义一个int型变量

private int radiusType;          

//Type
private static final int NONE=1;
private static final int TOP_RADIUS=2;
private static final int BOTTOM_RADIUS=3;
private static final int ALL=4;

四种情况的属性常量

radiusType=a.getInt(R.styleable.MaterialButton_radiusType,ALL);

解析属性,默认为ALL(四角都为圆角)

这时就可以在之前我们设置圆角float型数组的时候作一个选择判断了。

switch (radiusType){
        case NONE:
            radius = new float[] { 0, 0, 0, 0, 0, 0, 0, 0};
            break;
        case TOP_RADIUS:
            radius = new float[] { rectRadius, rectRadius,rectRadius, rectRadius, 0, 0, 0, 0 };
            break;
        case BOTTOM_RADIUS:
            radius = new float[] { 0, 0, 0, 0, rectRadius, rectRadius, rectRadius, rectRadius };
            break;
        case ALL:
            radius = new float[] { rectRadius, rectRadius,rectRadius, rectRadius, rectRadius, rectRadius, rectRadius, rectRadius };
            break;
    }

之后的操作和之前文章里的代码是一样的。


效果

最后是TOP_RADIUS和BOTTOM_RADIUS的效果:
微信图片编辑_20180705222107.jpg

微信图片编辑_20180705222203.jpg

标签: 自定义控件

添加新评论