news 2026/7/5 4:34:01

android compose shadow 阴影 使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
android compose shadow 阴影 使用

android compose shadow 阴影 使用

阴影可在视觉上提升界面,向用户指示互动性,并针对用户操作提供即时反馈。Compose 提供了多种将阴影纳入应用的方法:

  • Modifier.shadow():在符合 Material Design 指南的可组合项后面创建基于高度的阴影。
  • Modifier.dropShadow():创建显示在可组合项后面的可自定义阴影,使其看起来具有立体感。
  • Modifier.innerShadow():在可组合项的边框内创建阴影,使其看起来像压入其后面的表面。

实现阴影

使用 dropShadow() 修饰符可在内容后面绘制精确的阴影,使元素看起来具有立体感。

您可以通过其Shadow参数控制以下关键方面:

  • radius:定义模糊效果的柔和度和扩散度。
  • color:定义色调的颜色。
  • offset:沿 x 轴和 y 轴定位阴影的几何图形。
  • spread:控制阴影几何图形的扩展或收缩。

package com.wn.androidcomposedemo1.basegoogleimage import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.animation.animateColor import androidx.compose.animation.core.EaseInOut import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.tween import androidx.compose.animation.core.updateTransition import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.collectIsPressedAsState import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.draw.dropShadow import androidx.compose.ui.draw.innerShadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.shadow.Shadow import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.sp import com.wn.androidcomposedemo1.ui.theme.AndroidComposeDemo1Theme /** * Author : wn * Email : maoning20080808@163.com * Date : 2026/7/4 13:11 * Description : 阴影 */ class ShadowActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { AndroidComposeDemo1Theme() { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { ShadowExample() } } } } @Composable fun ShadowExample(){ Column( horizontalAlignment = Alignment.CenterHorizontally ) { Spacer(Modifier.height(20.dp)) Text("shadow阴影效果", fontSize = 30.sp, color = Color.Red) Spacer(Modifier.height(20.dp)) SimpleDropShadowUsage() Spacer(Modifier.height(20.dp)) AnimatedColoredShadows() } } @Composable fun SimpleDropShadowUsage(){ Box(Modifier.fillMaxWidth()){ Box( Modifier.width(200.dp) .height(200.dp) .dropShadow( shape = RoundedCornerShape(20.dp), shadow = Shadow( radius = 10.dp, spread = 6.dp, color = Color.Yellow, offset = DpOffset(x = 4.dp, 4.dp) ) ) .align (Alignment.Center) .background( color = Color.White, shape = RoundedCornerShape(20.dp) ) ){ Text("Drop Shadow", modifier = Modifier.align(Alignment.Center), fontSize = 32.sp) } } } //按下阴影动画效果 @Composable fun AnimatedColoredShadows(){ Box(Modifier.fillMaxWidth()){ val innerShadowColor1 = Color(0xFF00AAFF) val innerShadowColor2 = Color(0xFFADD8E6) val interactionSource = remember { MutableInteractionSource() } val isPressed by interactionSource.collectIsPressedAsState() val transition = updateTransition( targetState = isPressed, label = "button_press_transition" ) fun <T> buttonPressAnimation() = tween<T>( durationMillis = 400, easing = EaseInOut ) val shadowAlpha by transition.animateFloat( label = "shadow_alpha", transitionSpec = {buttonPressAnimation()} ) {pressed -> if(pressed) 0f else 1f } val blueDropShadow by transition.animateColor( label = "shadow_color", transitionSpec = {buttonPressAnimation()} ) {pressed -> if(pressed) Color.Transparent else innerShadowColor1 } Box( Modifier.clickable( interactionSource, indication = null ){ } .width(300.dp) .height(200.dp) .align(Alignment.Center) .dropShadow( shape = RoundedCornerShape(70.dp), shadow = Shadow( radius = 10.dp, spread = 0.dp, color = blueDropShadow, offset = DpOffset(x = 0.dp, -(2).dp), alpha = shadowAlpha ) ) .dropShadow( shape = RoundedCornerShape(70.dp), shadow = Shadow( radius = 10.dp, spread = 0.dp, color = blueDropShadow, offset = DpOffset(x = 2.dp, 6.dp), alpha = shadowAlpha ) ) .background( color = Color(0xFFFFFFFF), shape = RoundedCornerShape(70.dp) ) .innerShadow( shape = RoundedCornerShape(70.dp), shadow = Shadow( radius = 8.dp, spread = 4.dp, color = innerShadowColor2, offset = DpOffset(x = 4.dp, 0.dp) ) ) .innerShadow( shape = RoundedCornerShape(70.dp), shadow = Shadow( radius = 20.dp, spread = 4.dp, color = innerShadowColor1, offset = DpOffset(x = 4.dp, 0.dp), //alpha = in ) ) ){ Text("按压动画阴影", modifier = Modifier.align(Alignment.Center)) } } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 4:31:15

LTC6903与PIC18F97J60实现高精度数字控制振荡器设计

1. 项目背景与核心器件选型数字控制振荡器(DCO)在现代电子系统中扮演着关键角色&#xff0c;特别是在需要精确频率控制和快速调谐的场合。本项目选用LTC6903可编程振荡器与PIC18F97J60微控制器的组合方案&#xff0c;主要基于以下工程考量&#xff1a;LTC6903是Linear Technolo…

作者头像 李华
网站建设 2026/7/5 4:31:06

免费QQ空间说说备份神器:一键保存青春回忆的完整指南

免费QQ空间说说备份神器&#xff1a;一键保存青春回忆的完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代&#xff0c;QQ空间里那些承载着青春记忆的说说正悄然消失。…

作者头像 李华
网站建设 2026/7/5 4:27:00

RTX 5060 Ti 安装 CUDA 版 PyTorch 问题及解决方案

# RTX 5060 Ti 安装 CUDA 版 PyTorch 问题及解决方案问题描述问题原因解决方法1. 手动选择对应版本2. 使用 pip 直接安装注意事项问题描述 在 RTX 5060 Ti 显卡上安装并运行 PyTorch 时&#xff0c;可能会遇到如下提示&#xff1a; 问题原因 PyTorch 安装包是为计算能力&…

作者头像 李华
网站建设 2026/7/5 4:26:54

小米穿戴表盘设计革命:用Mi-Create轻松打造个性化智能手表界面

小米穿戴表盘设计革命&#xff1a;用Mi-Create轻松打造个性化智能手表界面 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 还在为小米手环和智能手表上单调的表…

作者头像 李华
网站建设 2026/7/5 4:24:39

胆酸-2,2,4,4-d4┃Cholic Acid-2,2,4,4-d4┃CAS 116380-66-6┃氘代内标试剂

在代谢组学研究中&#xff0c;准确测定生物样本中内源性胆酸浓度是解析肝肠循环与脂代谢调控机制的关键环节。然而&#xff0c;天然胆酸与基质共流出物难以区分&#xff0c;导致液相色谱-质谱联用&#xff08;LC-MS&#xff09;定量结果偏差。此时&#xff0c;引入稳定同位素标…

作者头像 李华
网站建设 2026/7/5 4:23:40

STM32如何实现多个设备的主从机CAN通讯?

主从机can通讯&#xff08;stm32&#xff09;基于STM32的CAN总线温度检测节点 的硬件设计与制作。1个主节点3个从节点&#xff0c;每个节点均包含STM32最小系统、CAN通信模块、温度采集模块&#xff0c;能够稳定完成本地温度采集并通过CAN总线实现数据收发。1、CAN 总线CAN&…

作者头像 李华