在开发过程中我们的按钮基本都有自己的样式风格,有的时候需要搞个圆角,有时候需要边框,有的时候需要虚线边框亦或者需要一个圆形的按钮。想大部分的实现方式都是写一个shape文件,在里边定义边框圆角等相关属性,如果项目中类似按钮很多切风格各不相同,那我们就需要写很多很多shape文件,这是我们无法忍受的。而SuperButton的出现可以帮你解决以上问题,从此远离shape文件的编写。
有图有真相
github源码地址传送门
开篇
开始之前我们先来看看shape文件是如何编写的
以上shape文件列出了常用的属性,当然并不是所有属性都会用到,我们就以这个shape文件作为参考开始本篇文章的分析。
我们知道写好shape文件之后是通过android:background=”@drawable/shape”这样的方式引入的,那么Android有没有方法去获取shape相关属性的类呐,经过一番查阅发现还是有个GradientDrawable类可以实现的,关于GradientDrawable的介绍请自行Google了解。
通过GradientDrawable的源码可以看到里边有很多方法和shape各个节点的名称一样,所以这正是我们需要的类,剩下的就是开始用GradientDrawable实现我们的封装之路。
具体实现
由于代码不复杂,看下注释也都能理解,就直接贴代码了
先初始化一下gradientDrawable = new GradientDrawable();
|
|
通过一下方法可以整体设置四个圆角也可以对各个角分别设置
|
|
设置渐变色的相关属性
对应shape中的size设置shape布局大小及设置边框和分割线
至此需要的方法都已经写完了,剩下的就是自定义view继承button,添加自己定义的属性
然后在代码中这样使用
通过配置shapeType的类型可以以此实现矩形,椭圆,线和圆环
至此关于shape代码实现的部分已经完成了,可以实现shape很多中效果,不过细心的你发现按钮按下的触摸反馈没有了,以前都是通过selector去实现的,那么代码能否实现呐。答案肯定是OK啦
然后把selector设置到setBackground中就好了
在运行一下,看看效果
最后
看了以上介绍是不是感觉很简单,那就赶快撸起袖子,自己撸一个玩玩吧!毕竟以后不用在写那么多shape文件了,哈哈!以后可以少搬点砖了