Android5.0 水波控件RippleDrawable简析

在Android5.0中新增了一种水波效果控件,叫RippleDrawable,当控件使用RippleDrawable作为背景(android:background)且在控件可以接受点击动作(android:clickable="true")的条件下,当按下或抬起手指时,会出现水波效果。效果如下图所示:

以上图片的layout代码如下:


   
   

    
    
    


   
   
ripple_bg.xml 内容如下:

    
    

    
    


    
    

以上的代码需要sdk版本为21的Eclipse或者Android Studio中编辑,并在Android5.0的虚拟机或真机上运行。

以下从源码的角度分析一下RippleDrawable的逻辑:

如下面的的时序图,以下将从4步简介按下时的效果:

Step 1:

RippleDrawable::onStateChange()

    @Override
    protected boolean onStateChange(int[] stateSet) {
        final boolean changed = super.onStateChange(stateSet);

        boolean enabled = false;
        boolean pressed = false;
        boolean focused = false;

        for (int state : stateSet) {
            if (state == R.attr.state_enabled) {
                enabled = true;
            }
            if (state == R.attr.state_focused) {
                focused = true;
            }
            if (state == R.attr.state_pressed) {
                pressed = true;
            }
        }

        setRippleActive(enabled && pressed);
        setBackgroundActive(focused || (enabled && pressed));

        return changed;
    }

以上代码中,又调用了setRippleActive()方法
    priva
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值