我的微信公众号:
如果你喜欢我的文章,欢迎关注我的微信公众号。
今天给大家介绍的是一款可以动态变化的按钮,如矩形变为圆形、圆形变为矩形、矩形先变为进度条然后再变为圆形,我们还是先看看效果图吧。
第一个按钮由矩形变为圆角矩形。
第二个按钮由矩形变为圆形。
第三个按钮由矩形变为进度条,进度条结束后变为圆形。
在此声明一下,效果实现我这里并非原创,我也是在github上面看到此效果,然后阅读源码,觉得不错,就通过自己的理解把此效果自己也实现了一下。
此控件的特效主要是形状的动态变换,比如背景色,宽度和高度,圆角弧度等属性,由于这里涉及变换的属性比较多,所以这里使用了Builder设计模式。
同样,我们还是需要自定义一些如下属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="DynamicButton">
<attr name="dybtn_color" format="color"></attr>
<attr name="dybtn_corner_radius" format="dimension"></attr>
<attr name="dybtn_stroke_color" format="color"></attr>
<attr name="dybtn_stroke_width" format="dimension"></attr>
<attr name="dybtn_pressed_color" format="color"></attr>
</declare-styleable>
<declare-styleable name="ProgressButton">
<attr name="pbtn_progresscolor" format="color"></attr>
<attr name="pbtn_maxvalue" format="float"></attr>
<attr name="pbtn_minvalue" format="float"></attr>
<attr name="pbtn_progress" format="float"></attr>
</declare-styleable>
</resources>
各属性意义如下:
dybtn_color:按钮的正常状态下的背景色
dybtn_corner_radius:按钮的圆角弧度
dybtn_stroke_color:按钮的边缘颜色
dybtn_stroke_width:按钮的边缘宽度
dybtn_pressed_color:按钮按下时的颜色
pbtn_progresscolor:进度条按钮的颜色
pbtn_maxvalue:进度条的最大值
pbtn_minvalue:进度条的最小值
pbtn_progress:进度条的当前进度
既然定义了属性,那么必然需要解析自定义属性,自定义属性通常在构造函数中进行,所以通常的做法是定义一个方法在所有构造函数中调用:
<