Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从源码分析 Android Button 点击效果

从源码分析 Android Button 点击效果

作者头像
开发者
发布于 2019-12-26 05:05:25
发布于 2019-12-26 05:05:25
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

Android 点击效果

我们平时在开发过程中都可能注意到,我们写的默认的 Button 都是有点击效果的,而且大小也有默认规定的,而 TextView 就没有。就想下面的图片一样。

是有默认效果的。通过查看 Button 的源码我们看到:

每个 button 有系统默认的风格样式,就是这里的风格样式,使得我们的 button 有了这种效果。下面我们来看看系统默认的 button 风格(注意不同的版本风格可能不同,但大体都是一样的)

通过这个构造函数,我们就可以找到 Button 的默认风格了。

这就是我们这里使用的默认 Button 的风格(不知道怎么找的看看我前面关于属性的文章),看到这里 Button 的最小高度,最小宽度都有了,这就解释了为什么默认的 Button 就那么大了。当你自己给 Button 设置一个 background 后,你会发现,你的 button 没有默认的那种波浪效果了。那么我们就猜想到肯定和 background 有关。那么我们来看看 button 的默认 background 是如何写的。

这个就是 background 的默认背景,这里的 ripple标签就是点击波浪效果的关键!然后我们仿照自己写一个 background

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ripple xmlns:android="xxxxxxxxxxx"
       android:color="#fffea50b">
   <item android:drawable="@drawable/bcg" /></ripple><inset xmlns:android="http://schemas.android.com/apk/res/android"
      android:insetLeft="4dp"
      android:insetTop="6dp"
      android:insetRight="4dp"
      android:insetBottom="6dp">
   <shape android:shape="rectangle">
       <corners android:radius="@dimen/abc_control_corner_material" />
       <solid android:color="@android:color/holo_blue_dark" />
       <padding android:left="@dimen/abc_button_padding_horizontal_material"
                android:top="@dimen/abc_button_padding_vertical_material"
                android:right="@dimen/abc_button_padding_horizontal_material"
                android:bottom="@dimen/abc_button_padding_vertical_material" />
   </shape></inset>

好了,这样我们就实现自定义 background 了。其实关于波浪 ripple 的用法还有很多。这里就不再说了,这里只是教大家从源码上分析,借助默认样式,来写出我们的自定义样式。

还有一点,可能会有疑问,那就是 button 下面的阴影效果,其实这里在 5.0 后 Material Design 设计风格。在 Android 5.0 后加入了新的属性 stateListAnimator 使 button 有了阴影效果。具体官方文档:https://developer.android.google.cn/guide/topics/graphics/prop-animation#ViewState 和 https://material.io/design/environment/elevation.html#elevation-shadows-shadows 如果你想去掉这种效果最有效的办法就是 stateListAnimator 的值设置为 @null 当然还有其他办法比如:你可能观察到了上面的 background 的 shape 最外面是 inset ,这样的效果是,如果你设置了 button 的宽 100 高 100 的话,button 的可点击范围是这么大,但是背景是减去 inset 设置的值。这样 button 就有了阴影的空间了。

同样,如果你给你的 TextView 设置了这种风格,那么你的 TextView 就和 button 的样式一样了。好了,现在你就可以完全定义自己的点击效果了!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android开发者家园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文彻底搞清楚 Material Design
Material Design 是 Google 在 2014 年 I/O 大会上发布的一种新的设计规范。这种设计风格给 Android UI 设计带来了很多的变化。让页面变得美感十足。
开发者
2019/12/26
4.3K0
一文彻底搞清楚 Material Design
Android 的UI效果篇Ripple
1.为什么要使用Ripple 2.如何使用Ripple效果 3.Ripple效果的颜色值改变 4.Ripple的波纹范围改变 5.Ripple添加一个item,其id为@android:id/mask
程思扬
2022/01/10
1.9K0
Android 的UI效果篇Ripple
Android:RippleDrawable 水波纹/涟漪效果
RippleDrawable可以实现上面效果图中的水波纹效果,它是在API 21 中添加的,所以,低于21的版本中不可使用。它的继承关系如下:
CnPeng
2020/08/11
2.8K0
Android项目实战(三十六):给背景加上阴影效果
圆角背景大家应该经常用: 一个drawable资源文件  里面控制corner圆角 和solid填充色  <shape xmlns:android="http://schemas.android.co
听着music睡
2018/05/18
1.7K0
compose--初入compose、资源获取、标准控件与布局
compose正式发布已经一年多了,越来越多的开发人员选择使用它,声明式UI也是未来的一个主流趋势,本人也是一年前学习后,并没有真正的使用,所以本着边学习,边分享的心态,准备写个compose系列的文章 首先compose目前只支持kotlin,基于google对移动端的鸿图,未来应该也不会支持其他语言,和传统安卓的xml布局不同,compose是通过kotlin定义一个一个组件,由于是通过代码定义的组件,每个组件都可以很方便的重用,这点在UI开发时确实便利了不少。至于声明式UI和命令式UI的区别,相信你会在后续实际使用时有很大的感触
aruba
2022/12/06
6.9K0
compose--初入compose、资源获取、标准控件与布局
Android入门教程 | res资源目录简介与shape的绘制和使用
把资源放进对应的目录后,可使用在项目 R 类中生成的资源 ID 来访问这些资源。形如 R.drawable.icon,R.layout.main_activity。 R类是自动生成的。代表resources。
Android_anzi
2021/10/29
1.7K0
自定义Material点击效果的View
最近在做项目的时候,遇到一个需求,需要自定义一个View;写到布局文件里面,希望也有Material的波纹点击效果,需要怎么弄呢?
用户1108631
2019/08/17
1.3K0
界面无小事(一): RecyclerView+CardView了解一下
前言 官方文档传送门 RecyclerView是Google推荐用来替代ListView的. 整体使用感觉和ListView差不多, 但是比ListView是要多不少优点的. 想要使用它们, 先要添加依赖项哦. 版本看着填, 最好和appcompat-v7保持一致. compile 'com.android.support:cardview-v7:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' ---- RecyclerVi
sean_yang
2018/09/04
1.6K0
界面无小事(一): RecyclerView+CardView了解一下
Android ShapeableImageView使用详解,告别shape、三方库
由上图可以看到ShapeableImageView也没有什么神秘的,不过是ImageView的一个子类而已,但是从效果图来看,在不写shape、不引入三方库的情况下,还是挺容易实现预期效果的,而且扩展性良好。
yechaoa
2022/06/10
2K0
Android ShapeableImageView使用详解,告别shape、三方库
Android5.0新特性之——按钮点击效果动画(涟漪效果)
      涟漪效果是Android5.0以后的新特性。为了兼容性,建议新建drawable-v21文件夹来存放RippleDrawable,drawable文件夹下也要放相应的适配图片。(这里可以安装一个AndroidSelector插件,具体的可以参考https://blog.csdn.net/oqihaogongyuan/article/details/53102615的第三部分)
用户3030674
2018/09/14
4.2K0
Android5.0新特性之——按钮点击效果动画(涟漪效果)
谷歌官方导航控件BottomNavigationBar的日常使用
BottomNavigationBar和其他控件的配合是完全解耦的,日常使用分为BottomNavigationBar+ViewPager 、BottomNavigationBar+FrameLayput 1 使用 BottomNavigationBar+ViewPager 直接上代码   <android.support.v4.view.ViewPager         android:id="@+id/view_pager"         android:layout_width="match_pa
用户1696846
2018/07/13
2.1K0
Android之CardView[通俗易懂]
CardView是View的子类,View一般使用Background设置背景色,为什么还要单独提取出一个属性让我们来设置背景色呢?
全栈程序员站长
2022/11/07
6.9K0
Android之CardView[通俗易懂]
Android订票系统订票功能实现(特效点击按钮实现票数自动加减1)
要实现的效果是点击加按钮就购买分数自动加一,同时计算合计的总计 先共享一份colors.xml的数据,比较全面,可以根据需要添加 <?xml version="1.0" encoding="UTF-8
SmileNicky
2019/01/17
2.1K0
Android资源那些事儿
--以下:正文部分-- Android的设计哲学为:设计与表现分离。 这样有利于程序的解耦。所以我们才可以在XML文件中定义各种资源类型,并在其他的xml文件或java代码中进行引用。
用户2802329
2018/08/07
9560
Android资源那些事儿
Floating Action Button-Android M新控件
浮动操作按钮 (简称 FAB) 是: “一个特殊的promoted操作案例。因为一个浮动在UI之上的圆形图标而显得格外突出,同时它还具有特殊的手势行为”
小小工匠
2021/08/16
1.6K0
Android 5.0 Button 按钮水纹效果的适配问题
但是这样在5.0以下的系统,这样就没有效果,按钮会变成默认的灰色状态,点击按钮也不会有颜色的状态区别 为了兼容5.0以下的设备,我们可以利用seletor(勘误:button用theme在5.0以下也是有按压变色的,虽然没有水波纹,下面的方法仍然适用其他控件的适配)
夏洛克的猫
2018/10/18
1.3K0
Android 5.0  Button 按钮水纹效果的适配问题
CardView 简介和使用
CardView 简介 CardView 是 Google 官方发布 MD 风格卡片布局控件,开发者可以很方便的使用它将布局做成卡片效果。在使用 CardView 之前,多少应该对它有一定的了解,下面将对其实现做简单的介绍。
Java架构师必看
2022/01/29
1.4K0
CardView 简介和使用
Android Material UI控件之MaterialButton
  作为Android的开发者,常用控件肯定少不了按钮控件,常规的按钮控件,只能满足基本需求,而日常开发中,都会有渐变按钮,圆形按钮,或者立体按钮,这些都需要自己的设置样式,就拿圆角按钮来说,可能你会这是一个shape文件,然后设置背景和圆角的大小,最后在按钮的background属性中设置好,就是一个圆角的按钮了。这样就显得有些麻烦了,因为要你时碰到一个花里胡哨的UI和搞事情的产品,你就完犊子了。你会创建很多这样的drawable文件,并且每一个你还要命名规范,改起来是很费劲的。而MaterialButton就很好的帮你解决这些问题。让你的UI开发变得轻松一些。是骡子是马,牵出来溜溜,下面进入正文:
晨曦_LLW
2020/10/26
3.5K0
Android Material UI控件之MaterialButton
Android 样式系统 | 常见的主题背景属性
在前一篇 Android 样式系统文章 中,我们介绍了主题背景与样式的区别,以及如何编写灵活的样式与布局代码用于抽离可变化部分。
Android 开发者
2022/09/23
1.4K0
Android 样式系统 | 常见的主题背景属性
Android开发常用的知识点
因为横屏有两个方向的横法,而这个设置横屏的语句,如果不是默认的横屏方向,会把已经横屏的屏幕旋转180°。
码客说
2019/10/22
2.8K0
Android开发常用的知识点
相关推荐
一文彻底搞清楚 Material Design
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验