翻翻git之---一个类解决圆角,虚线等自定义Button拒绝一堆无用的画布文件

转载请注明出处:王亟亟的大牛之路
最近都在疯狂的”肝”,偶尔看看js然后打游戏,有点”荒废学业”不是太好,然后强迫自己发一篇,然后正好看知道这个类还不错,就推荐给大家。
素材来源:https://github.com/niniloveyou/StateButton
先来安利下我的收纳库:https://github.com/ddwhan0123/Useful-Open-Source-Android日更,精挑细选,希望你喜欢!
先看下运行效果:


翻翻git之---一个类解决圆角,虚线等自定义Button拒绝一堆无用的画布文件
文章图片
基本上2b的ui ux需要的基本按钮样式都有了

翻翻git之---一个类解决圆角,虚线等自定义Button拒绝一堆无用的画布文件
文章图片
圈出来的复制到你的项目里就OK了 我们来看下他是怎么实现的(就一个类和一些自定义xml内容)

public class StateButton extends AppCompatButton

继承于v7下的AppCompatButton,来应对一些相对复杂的应用场景

构造函数




翻翻git之---一个类解决圆角,虚线等自定义Button拒绝一堆无用的画布文件
文章图片
自定义view”标配的构造函数”,所有初始化逻辑都在setup(attrs); 方法里执行。

setup(attrs)方法一大堆初始化,这里代码不贴了,文字解释下干了些什么
首先构建了一个多维数组,然后给他进行了初始化操作,分别是
按压的状态, 获得焦点是的状态, 一般的样式, 不可使用时的样式



翻翻git之---一个类解决圆角,虚线等自定义Button拒绝一堆无用的画布文件
文章图片
然后通过getContext().obtainStyledAttributes(attrs, R.styleable.StateButton);

获取attires.xml文件里预设的从布局文件里传来的自定义参数,然后再各类set进行渲染,做初始化逻辑。
这里提一下,测绘操作


翻翻git之---一个类解决圆角,虚线等自定义Button拒绝一堆无用的画布文件
文章图片
他的圆角逻辑是,如果有设置圆角,那就按照传入的圆角值来初始化。如果有圆角逻辑但是没有给具体圆角值,那就根据高度来设置圆角值。

其他就是一大堆set的东西了,没什么营养
这个库实现不难,大家只要想到了都可以做出来,但是作者想到了,也做了,并且开源出来这就是功德,在这里感谢下原作者https://github.com/niniloveyou/StateButton(如果有小伙提示,作者非原创 我会删除本文)
总结:
构造函数初始化一系列参数,和默认值(按下去的状态,初始化的颜色,是否虚线,是否圆角等等等)
其实低层调用的都是父类的方法
设置文字颜色setTextColor(ColorStateList colors)–>TextView
设置背景颜色,虚线等 都是来源于 GradientDrawable


翻翻git之---一个类解决圆角,虚线等自定义Button拒绝一堆无用的画布文件
文章图片
他是个Drawable的子类

这里不得不感慨源生sdk的强大,提供给我们如此丰富的api
闲话:
最近有很多朋友跟我说“啊呀,感觉安卓没啥东西可以学了啊”,“感觉好荒废啊,没什么进展,在瓶颈期啊”等等的抱怨”
这样的想法我之前一段时间也有,这边给一个大致的回复
安卓这几年更新的“新东西”确实不像以前,一个大版本出一堆新产物,6.0 7.0之间确实没有,但是内部实现一直有优化,你对那些优化了解吗?
Rx溜了么?
插件化溜了吗?
系统优化行不行?
项目解耦行不行?
其实要学的很多
这世界已经很浮躁了,不缺梦想家,需要有头脑的实干家!!!加油吧!!!
有活干或者有开源组能叫我,可以扫微信,当然有技术问题希望一起研究也可以找我
【翻翻git之---一个类解决圆角,虚线等自定义Button拒绝一堆无用的画布文件】

翻翻git之---一个类解决圆角,虚线等自定义Button拒绝一堆无用的画布文件
文章图片

    推荐阅读