Android 腾讯开源UI框架 - QMUI

这两天受到老同事的影响,突然想要写博客了,以前都是写在石墨文档里,在线更新方便,嘿嘿。。

好了,废话不多说。

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"
发布了7 篇原创文章 · 获赞 4 · 访问量 1207

猜你喜欢

转载自blog.csdn.net/d_shaoshuai/article/details/105059990