Compose Button移除水波纹效果

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一、背景

        在使用Compose实现Button按钮时,设计要求移除按钮的水波纹效果,只保留按压效果,经查Compose1.4.3版本中,并没有直接移除水波纹的能力

二、遇到问题

        经过多次尝试,使用Compose的Button组件始终无法实现目标效果,使用Box+Text 最终绘制的效果Text显示的颜色和字间距又和Button效果渲染的不一致,

三、效果演示

        这里就不演示了。代码在下面,你试试就知道效果了

                        

三、实现方案

        经过多次失败后,看了一下Compose的Button组件源码,找到问题所在。最终得出以下效果实现代码

fun ButtonBlackOutline(modifier: Modifier = Modifier, content: String = "", onClick: () -> Unit) {
    var isPressed by remember { mutableStateOf(false) }
    var buttonRect by remember { mutableStateOf(Size(0f, 0f)) }

    Box(
        modifier = modifier
            .background(
                color = if (isPressed) {
                    colorResource(
                        id = CommonColor.common_pressed_btn_color
                    )
                } else {
                    colorResource(id = CommonColor.color_transparent)
                },
                shape = RoundedCornerShape(100.dp)
            )
            .fillMaxWidth()
            .height(40.dp)
            .border(0.5.dp, colorResource(id = CommonColor.text_600), RoundedCornerShape(100.dp))
            .pointerInteropFilter { event ->
                when (event.action) {
                    MotionEvent.ACTION_DOWN -> {
                        isPressed = true
                        true
                    }

                    MotionEvent.ACTION_UP -> {
                        if (isPressed) {
                            onClick()
                        }
                        isPressed = false
                        true
                    }

                    MotionEvent.ACTION_CANCEL -> {
                        isPressed = false
                        true
                    }

                    MotionEvent.ACTION_MOVE -> {
                        val isInside = event.x in 0f..buttonRect.width && event.y in 0f..buttonRect.height
                        isPressed = isInside
                        true
                    }

                    else -> false
                }
            }
            .onGloballyPositioned { coordinates ->
                buttonRect = coordinates.size.toSize()
            },
        contentAlignment = Alignment.Center,
        content = {
            // 实现和Button效果一致的重要代码
            CompositionLocalProvider(
                LocalContentAlpha provides ButtonDefaults.buttonColors().contentColor(enabled = true).value.alpha
            ) {
                ProvideTextStyle(
                    value = MaterialTheme.typography.button
                ) {
                    Text(
                        text = content,
                        color = colorResource(id = CommonColor.text_900),
                        fontSize = 14.sp
                    )
                }
            }
        }
    )
}

        

compose开发:去除点击水波纹阴影效果 针对整个Activity,你可以在最root的compose里设置,通过CompositionLocal(让数据流经界面树的一种隐式方式),属性传递,把children就全部替换了。 阅读详情

相关推荐

Compose 去除点击水波纹阴影效果_局部and全局去除-CompositionLocal实例

一针对单个view,去除点击效果,可以在clickable中添加indication=null,interactionSource=remember{MutableInteractionSource()}实际开发中,要求去掉点击效果,不单单是一个view,肯定是整个界面,甚至是整个应用,如何全局去除默认的点击效果?针对整个Activity,你可以在最root的compose里设置,通过CompositionLocal(composeview的点击默认有阴影效果,实际开发中要求去除?......

麦小洛 5351

Android: Jetpack Compose如何禁用涟漪(水波纹效果

默认Modifier.clickable() 点击事件 自带点击水波纹效果; 若不想要此效果, 可使用如下两个方法。可以将indication设为null, 方法二 使用pointerInput设置点击事件 总结 如果你还有其他方法,欢迎留言讨论。.........

小小小石头的专栏 6069

Android Material Design 组件实战:SwitchMaterial、Chip 与 ChipGroup 深度解析

Android 应用开发中,Material Design 组件库(MDC)是实现现代化、一致化用户界面的核心工具。其设计哲学源于对真实世界物理特性的模拟,通过标准化的视觉与交互规范,确保应用在不同平台和设备上都能提供流畅、直观的用户体验。从技术原理上看,MDC 组件深度集成了主题系统,开发者可以通过修改主题属性全局控制组件样式,极大地提升了开发效率和项目的可维护性。在工程实践中,诸如 SwitchMaterial 这样的开关控件,不仅提供了符合直觉的触摸反馈,还通过 Chip 和 ChipGroup

weixin_34246551的博客 302

安卓 compose box 去掉点击时默认的水波纹效果

安卓 compose box 去掉点击时默认的水波纹效果

我的博客 837

Jetpack Compose 从入门到入门(九)

本篇是Compose的手势部分。

唯鹿的博客 2671

flutter学习笔记

1.跨平台移动UI框架2.与现有的代码一起工作(可以直接嵌入到原生代码中或直接把原生代码嵌入到自己的代码中运行)3. 完全免费、开源。

haoxuhong的博客 8173

基于HarmonyOS API 24实战解析电影收藏管理@ObjectLink 则用于子组件中接收一个 @Observed 对象的引用,使得子组件能够对该对象的属性变化做出响应式更新

在移动互联网与智能穿戴设备高度普及的今天,"习惯养成"已经从一个模糊的自我管理理念,演变为一个可量化、可追踪、可视化的数字化产品赛道。越来越多的人希望借助手中的智能终端,把"早起、冥想、阅读、运动"这些抽象的自律行为,转化为一条条清晰的数据曲线和一张张可触摸的打卡卡片。而鸿蒙生态(HarmonyOS)凭借其跨设备协同、分布式软总线以及声明式 UI 开发框架 ArkUI,为这类注重"轻量化交互 + 即时反馈"的生活方式类应用提供了极为理想的生长土壤。本应用正是一款面向"晨间场景"深度打磨的习惯追踪工具。它聚焦

2301_79516720的博客 151

第 44 章:小组件、RemoteViews 与 RemoteCompose

本节提供实操示例,演示本章介绍的各项概念。

dengfuma的专栏 365

Compose 实现手写春联效果

前言 又是一年新春,在这里先给大家拜个早年了。每逢春节,写春联贴春联都是一项必不可少的活动。本次主要使用Compose,实现手写春联的效果。如果对你有所帮助,欢迎点个赞或者评论鼓励一下~ 爆竹声中一岁除 春风送暖入屠苏 千门万户曈曈日 总把新桃换旧符 效果图 生成的春联 主要思路 事件监听 我们需要实现手写春联效果,首先就是要做事件监听,Android中自然是监听Action_Down,Action_Move,Action_UP,Compose中应该如何处理呢? 其实Compose中也可以利用poi

xiaxia20220117的博客 6422

Android Compose 分享 2021-04-14

Android Compose 分享 文章目录Android Compose 分享目标Compose 的 Column、Row、Box 基本布局ColumnRowBoxModifier 的使用列表实现 Item 布局拼接 Item 成为 List总结 List 的实现Compose 的状态管理Compose 自定义 View实现一个手动划线的 DrawView实现一个进度条的 LevelViewCompose 是什么总结上手体验学习资料 目标 认识 Compose 学习 Compose 的基本布局 Com

欧拉阿旺 1861

小米 Android ACTION_UP不响应

问题概要 在小米手机(测试机为小米4LTE)上,对一个TextView/Button设置OnTouchListener,长按View抬起时,并没有收到ACTION_UP时间,而是收到了ACTION_CANCEL事件。 理论 查阅资料,发现如下理论:当控件收到前驱事件(什么叫前驱事件?一个从DOWN一直到UP的所有事件组合称为完整的手势,中间的任意一次事件对于下一个事件而言就是它的前驱事件)之后,后...

u012545728的博客 849

Android Compose笔记

Compose笔记,记录分享一些Compose需求的实现

limingbocsdn的博客 2455

Jetpack Compose实现点击事件click的多种方法

这篇文章主要介绍了Jetpack Compose实现点击事件的多种方法,Jetpack Compose是一款基于Kotlin的声明式UI工具包,可以方便地创建漂亮的用户界面,下面我们就来看看Jetpack Compose添加点击事件都可以怎么实现。需要注意,对于 Button 类的 Composable ,不推荐使用 Modifier.clickable,应该使用其自带的 onClick 参数,虽然其内部在调用 Modifier.clickable 之外还有一些额外处理。

chinaherolts2008的博客 580

android事件传递ACTION_DOWN、ACTION_MOVE、ACTION_UP的深入研究

对于事件的传递大概的流程,都比较清楚。这里主要探讨下事件流ACTION_DOWN、ACTION_UP、ACTION_MOVE不同部分的拦截会有什么样的影响。

lijiuche的博客 1万+

安卓禁用底部导航栏点击 水波纹效果

app:itemRippleColor="@null" <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBot

WenZhengshi的博客 490

Android 去掉控件点击的瞬间的波纹效果

去掉app点击控件会有水波纹效果

yiy91的博客 7217

Jetpack Compose - Button

Jetpack Compose - Button1、Button1.1、属性一览1.2、使用示例2、IconButton2.1、属性一览:2.2、使用示例3、IconToggleButton3.1、属性一览3.2、使用示例待补充未解决问题 关于Button官方给出了很多种样式,有Button、IconButton、IconToggleButton、TextButton、OutlinedButton等,还有一个RadioButton我们会单独开文章去讲解。 1、Button 1.1、属性一览 我们先来看下 B

乐翁龙 6395

20. Android Compose开发遇到的问题

这周工作的期间遇到一个问题,问题很棘手,严重影响体验和使用。 问题描述:当页面中含有TextField的时候,如果点击了textField以外的地方直接导致页面卡住,点击任何地方都没有反应,也不是ANR,就是触摸整个页面没反应,感觉是焦点获取的问题。很奇怪的是点击返回按钮是可以回退到前一个activity,这就令我感到奇怪。利用Preview单独运行预览界面的时候又不会发生这样的情况。这。。。。。 我反复斟酌是我gradle哪里配置错了,修改了编译的参数,也是不好用。 我使用compose开发前已经写了很多

u010436867的博客 3153

jetpack Compose 学习笔记

Modifier.clickable() 取消点击水波纹 modifier = Modifier .clickable(onClick = {}, indication = null, interactionSource = remember { MutableInteractionSource() })

qq_44657038的博客 1296
上一篇: Compose在xml中使用滑动冲突处理
下一篇: No port is available from the preconfigured port range
FrancisBingo
博客等级 码龄10年 3427粉丝 105原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FrancisBingo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值