专栏首页每天学点Android知识自定义Material点击效果的View

自定义Material点击效果的View

最近在做项目的时候,遇到一个需求,需要自定义一个View;写到布局文件里面,希望也有Material的波纹点击效果,需要怎么弄呢?

?attr/selectableItemBackground

将该View的background属性设为标题的样式即可,这样在5.0以上就有了波纹效果,在5.0以上就是selector的效果。

这样设置了后,就有了系统默认的效果。

实验

其实,现在写个Button,默认也都是有波纹点击效果的,下面分别对三个button,第一个没设置background,第二个和第三个的属性如下:

//Button 1
android:background="?attr/selectableItemBackground"
//Button 2
android:background="?attr/selectableItemBackgroundBorderless"

效果如下:

可以清楚看到selectableItemBackground和selectableItemBackgroundBorderless的区别,并且设置了之后,button的背景将与其父View的背景色一样。

原理

设置了attr/selectableItemBackground,其实是给View设置了一个RippleDrawable的背景。

自定义RippleDrawable

和其他很多Drawable一样,RippleDrawable也是可以通过写xml的形式来定义的,下面创建一个drawable xml文件,其定义如下:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ff00ff00" android:radius="10dp">
   <item android:drawable="@color/whiteColor"></item>
</ripple>

其中ripple中的color表示波纹的颜色,radius表示波纹的半径,item是默认的背景色,效果如下图:

可以看到Button3的背景不再和父View一样是红色,而变成了白色。

当不设置item时,比如:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ff00ff00">
</ripple>

效果将会是一个没有边界的点击效果,和bordless一样。

5.0版本以下的兼容性

使用自定义ripple后,在5.0版本以上用不了,替代方法是将上面的布局放到drawable-v21目录下,在drawable目录下创建一个同名文件,使用selector作为背景色。我这边是采用的这种方案。

本文分享自微信公众号 - 每天学点Android知识(android_every_day),作者:星风coder

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 让View跟随状态动起来——StateListAnimator

    StateListAnimator定义了一组动画,可以根据View drawable的状态进行不同的切换。所谓状态指的是statepressed、stateen...

    用户1108631
  • TabLayout使用指南

    TabLayout是开发中经常使用到的控件,经常与ViewPager一起配合使用,一组tab,可以点击、可以滚动。这不,我们的app中也是用到了这个控件,之前对...

    用户1108631
  • AppBarLayout学习

    AppBarLayout是一个垂直的LinearLayout,实现了很多和协调布局一起合作的滚动属性。其子View可以通过setScrollFlags()或在x...

    用户1108631
  • 6.Android-五大布局

    如果要想设置两个控件的比例大小,则设置android:layout_weight(不是android:layout_width),值越大则比例越大(垂直布局则设...

    张诺谦
  • 仿优酷Android客户端图片左右滑动(自动滑动)

    最终效果: ? 页面布局main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns...

    欢醉
  • ExpandableListView实现商品列表折叠

    简介 在日常的开发中,有可能会遇到需要一些可以展开的列表,比如QQ的好友列表,电商的购物车折叠显示。Android也给我们提供ExpandableListVie...

    xiangzhihong
  • 利用 CollapsingToolbarLayout 完成联动的动画效果

    最初的想法是自己去利用 Android 的嵌套滚动机制,去实现上面的嵌套滚动效果.但最后为了开发效率直接利用了 CollapsingToolbarLayout...

    夏洛克的猫
  • Android应用界面开发——ListView,GridView,ScrollView

    ListView的意思是列表视图,是应用最广泛的一种视图,例如联系人,功能列表,菜单等等都会用到ListView。

    trampcr
  • ExpandableListView实现商品列表折叠

    简介 在日常的开发中,有可能会遇到需要一些可以展开的列表,比如QQ的好友列表,电商的购物车折叠显示。Android也给我们提供ExpandableListVie...

    xiangzhihong
  • 仿人人网侧边栏滑动效果

    提莫队长

扫码关注云+社区

领取腾讯云代金券