Android5.0 ripple效果低版本的实现

Android5.0 按钮的波纹效果的确是十分炫酷的

为了能使在低版本使用,我们需要使用一个类 MaterialRippleLayout
导入类的方法

首先先创建 MaterialRippleLayout类,之后在values里创建attributes文件,drawables文件和在drawable里创建selector文件
values/attributes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MaterialRippleLayout">
        <attr name="rippleColor" format="color" localization="suggested" />
        <attr name="rippleDimension" format="dimension" localization="suggested" />
        <attr name="rippleOverlay" format="boolean" localization="suggested" />
        <attr name="rippleAlpha" format="float" localization="suggested" />
        <attr name="rippleDuration" format="integer" localization="suggested" />
        <attr name="rippleFadeDuration" format="integer" localization="suggested" />
        <attr name="rippleHover" format="boolean" localization="suggested" />
        <attr name="rippleBackground" format="color" localization="suggested" />
        <attr name="rippleDelayClick" format="boolean" localization="suggested" />
        <attr name="ripplePersistent" format="boolean" localization="suggested" />
        <attr name="rippleInAdapter" format="boolean" localization="suggested" />
    </declare-styleable>
</resources>

values/drawables.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="transparent">#00FFFFFF</drawable>
    <drawable name="default_pressed">#00FFFFFF</drawable>
</resources>

这其中的颜色并没什么作用,只是为了给个默认的颜色,所有就这样写,具体颜色修改可以在布局文件中或者代码中修改

drawable/selector.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:exitFadeDuration="200">
    <item android:state_window_focused="false" android:drawable="@drawable/transparent"/>

    <item android:state_focused="true"  android:state_pressed="true"  android:state_enabled="false"
        android:drawable="@drawable/transparent"/>
    <item android:state_focused="true"  android:state_enabled="false"
        android:drawable="@drawable/transparent"/>
    <item android:state_focused="true"  android:state_pressed="true" android:state_enabled="true"
        android:drawable="@drawable/default_pressed"/>
    <item android:state_focused="false" android:state_pressed="true"
        android:drawable="@drawable/default_pressed"/>

</selector>

配置好这些,我们就可以使用了

通过xml文件的配置

<com.example.hzwangwentong.ripplelayout.MaterialRippleLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffff00"     //按钮背景颜色
    android:layout_marginTop="24dp"
    app:rippleOverlay="true"
    app:rippleColor="#03A9F4"   //波纹的颜色
    app:rippleAlpha="0.2"
    app:rippleDelayClick="false"
    app:rippleHover="true">

    <Button
        android:id="@+id/ripple_layout_1"
        android:layout_width="match_parent"
        android:background="@drawable/selector"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="通过xml文件设置"/>

</com.example.hzwangwentong.ripplelayout.MaterialRippleLayout>

之后就在代码中给其添加监听就行了,为了使效果完美,需要将2个点击监听都要添加。

findViewById(R.id.ripple_layout_1).setOnClickListener(this);
findViewById(R.id.ripple_layout_1).setOnLongClickListener(this);

通过代码文件的配置
我们在布局文件中创建一个button

<Button
    android:id="@+id/ripple_layout_2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="24dp"
    android:layout_gravity="center"
    android:background="@drawable/selector"
    android:text="通过代码设置"/>

之后在代码中

View view = findViewById(R.id.ripple_layout_2);
MaterialRippleLayout.on(view)
        .rippleColor(Color.parseColor("#D32F2F"))   //设置波纹的颜色  设置颜色必须这样设置,通过R.color.XXXX的设置是无效的
        .rippleAlpha(0.2f)
        .rippleHover(true)
        .create();

view.setOnLongClickListener(this);
view.setOnClickListener(this);

当然还有其他的方法。
.rippleBackground(Color.parseColor(“#D32F2F”)) 来设置按钮的背景色

具体的可以去类中查看。

最后是效果

ripple的代码地址:http://pan.baidu.com/s/1gd0ctH5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值