这两天受到老同事的影响,突然想要写博客了,以前都是写在石墨文档里,在线更新方便,嘿嘿。。
好了,废话不多说。
QMUI 作为腾讯开源的 github 上 star 数 10.4k 的优秀开源UI框架,相信做 Android APP 开发的小伙伴,都多多少少听说过,此框架内的按钮可以设置点击效果 alpha,但是只能在代码中设置开启这个属性,并且默认是 0.5f,并没有暴露在外面的设置透明值的方法,每次到代码中设置显得颇为麻烦,周末抽时间简单加工了一下,可以在代码中设置点击效果及禁用效果,特此记录一下。
以 QMUIAlphaButton 为例,子类的构造方法中默认都将点击效果禁用了,不知道为什么这么设计,咱也不管了,咱要的就是 xml 可以设置透明度。
首先在 attrs.xml 添加:
<!-- dss added -->
<declare-styleable name="qmui_alpha">
<attr name="m_qmui_alpha_pressed" format="float"/>
<attr name="m_qmui_alpha_disabled" format="float"/>
</declare-styleable>
<!-- dss end-->
通过看 QMUI 的源码,可以发现,所以带有点击效果的控件,都实现了 QMUIAlphaViewInf 接口,重写了
setChangeAlphaWhenPress(boolean changeAlphaWhenPress)
setChangeAlphaWhenPress(boolean changeAlphaWhenDisable)
但是在其子类中大部分都设置了 false,我们要做的就是把子类中设置的全部注释掉。
然后在其父类中,以 QMUIAlphaButton 为例:
private void init(Context context, AttributeSet attrs) {
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.qmui_alpha);
pressedAlpha = array.getFloat(R.styleable.qmui_alpha_m_qmui_alpha_pressed, -1f);
disabledAlpha = array.getFloat(R.styleable.qmui_alpha_m_qmui_alpha_disabled, -1f);
array.recycle();
if (pressedAlpha < 0) {
setChangeAlphaWhenPress(false);
} else {
setChangeAlphaWhenPress(true);
}
if (disabledAlpha < 0) {
setChangeAlphaWhenDisable(false);
} else {
setChangeAlphaWhenDisable(true);
}
}
在各个构造方法中执行这段代码,并将:
private QMUIAlphaViewHelper getAlphaViewHelper() {
if (mAlphaViewHelper == null) {
mAlphaViewHelper = new QMUIAlphaViewHelper(this);
}
return mAlphaViewHelper;
}
改为:
private QMUIAlphaViewHelper getAlphaViewHelper() {
if (mAlphaViewHelper == null) {
mAlphaViewHelper = new QMUIAlphaViewHelper(this, pressedAlpha, disabledAlpha);
}
return mAlphaViewHelper;
}
至此,xml 设置点击及禁用效果就完美实现啦,这下我们就不用每次在代码中 find 出来再设置了,可以开心的在 xml 中直接设置效果,如果没有设置,则为 -1 ,直接关闭效果。
在代码中使用:
app:m_qmui_alpha_pressed="0.7"