android compose DrawScope - Canvas 使用
android compose DrawScope - Canvas 使用在 Compose 中绘制自定义内容的核心方法是使用修饰符例如 Modifier.drawWithContent、Modifier.drawBehind 和 Modifier.drawWithCache。如果您只需使用可组合项进行绘制可使用 Canvas 可组合项。Canvas可组合项是一个包裹 Modifier.drawBehind 的便利封装容器。在布局中放置Canvas的方式与放置其他 Compose UI 元素相同。在Canvas中您可以通过精确控制元素的样式和位置来绘制元素。所有绘制修饰符都会提供 DrawScope一个维护自身状态且限定了作用域的绘制环境可供您为一组图形元素设置参数。DrawScope提供了几个有用的字段例如size用于指定DrawScope的当前尺寸的Size对象。package com.wn.androidcomposedemo1.basegoogleimage import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.material3.Button 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.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Canvas import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.rotate import androidx.compose.ui.graphics.drawscope.scale import androidx.compose.ui.graphics.drawscope.translate import androidx.compose.ui.res.imageResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.wn.androidcomposedemo1.R import com.wn.androidcomposedemo1.ui.theme.AndroidComposeDemo1Theme /** * Author : wn * Email : maoning20080808163.com * Date : 2026/7/3 16:21 * Description : * 在 Compose 中绘制自定义内容的核心方法是使用修饰符例如 Modifier.drawWithContent、Modifier.drawBehind 和 Modifier.drawWithCache。 */ class DrawScopeActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { AndroidComposeDemo1Theme() { Surface( modifier Modifier.fillMaxSize(), color MaterialTheme.colorScheme.background ) { DrawScopeExample() } } } } Composable fun DrawScopeExample(){ Column(horizontalAlignment Alignment.CenterHorizontally) { Spacer(Modifier.height(20.dp)) Text(使用DrawScope - Canvas绘制, fontSize 20.sp, color Color.Red) Spacer(Modifier.height(20.dp)) var showScale by remember { mutableStateOf(false) } var showTranslate by remember { mutableStateOf(false) } var showRotate by remember { mutableStateOf(false) } var showImage by remember { mutableStateOf(false) } Row(horizontalArrangement Arrangement.Center) { Button(onClick { showScale !showScale; }) { Text(缩放) } Spacer(Modifier.width(20.dp)) Button(onClick { showTranslate !showTranslate }) { Text(平移) } Spacer(Modifier.width(20.dp)) Button(onClick { showRotate !showRotate }) { Text(旋转) } Spacer(Modifier.width(20.dp)) Button(onClick { showImage !showImage }) { Text(绘制图片) } } DrawScopeScaleExample(showScale) DrawScopeTranslateExample(showTranslate) DrawScopeRotateExample(showRotate) DrawScopeImageExample(showImage) } } //缩放 Composable fun DrawScopeScaleExample(showScale : Boolean){ if(showScale){ Canvas(modifier Modifier.fillMaxSize()) { scale(scaleX 3f, scaleY 5f){ drawCircle(Color.Blue, radius 20.dp.toPx()) } } } } //平移 Composable fun DrawScopeTranslateExample(showTranslate : Boolean){ if(showTranslate){ Canvas(modifier Modifier.fillMaxSize()) { translate(left 100f, top -300f) { drawCircle(Color.Red, radius 100.dp.toPx()) } } } } //旋转 Composable fun DrawScopeRotateExample(showRotate: Boolean){ if(showRotate){ Canvas(modifier Modifier.fillMaxSize()){ rotate(degrees 45f){ drawRect( color Color.Gray, topLeft Offset(x size.width/3f, y size.height / 3f), size size / 3f ) } } } } //绘制图片 Composable fun DrawScopeImageExample(showImage : Boolean){ val dogImage ImageBitmap.imageResource(id R.drawable.dog) if(showImage){ Canvas(modifier Modifier.fillMaxSize().padding(start 20.dp, top 20.dp), onDraw { drawImage(dogImage) }) } } }

相关新闻

计算机视觉前沿:从Transformer到多模态与边缘部署的2025技术全景

计算机视觉前沿:从Transformer到多模态与边缘部署的2025技术全景

1. 项目概述:计算机视觉前沿的七月风暴如果你最近在关注AI领域的动态,会发现“计算机视觉”这个词的热度又上了一个新台阶。无论是社交媒体上刷屏的AI生成视频,还是电商平台里越来越逼真的虚拟试穿,背后都离不开计算机视觉技术的驱…

2026/7/3 17:56:24阅读更多 →
沪明合作砺精兵,水趣护航承德消防舟艇救援技术培训班圆满收官

沪明合作砺精兵,水趣护航承德消防舟艇救援技术培训班圆满收官

依托"沪明合作"实战联融,助力消防队伍实战能力提升!6月28日,河北省承德市消防救援支队舟艇救援技术培训班在沙县基地圆满收官。上海水趣全程提供专业水域救援装备,护航本次实战实训顺利开展。 为全力备战汛期水域灾害救…

2026/7/3 17:56:24阅读更多 →
SPI EEPROM与PIC微控制器的嵌入式存储方案设计

SPI EEPROM与PIC微控制器的嵌入式存储方案设计

1. 项目背景与硬件选型解析在嵌入式系统开发中,非易失性存储方案的选择直接影响产品的可靠性和用户体验。M95M04这颗4Mb SPI接口的EEPROM芯片,配合PIC18LF45K40这款低功耗高性能微控制器,构成了一个典型的用户配置存储解决方案。这种组合特别…

2026/7/3 17:51:24阅读更多 →
openeuler/distributed-beget入门教程:从安装到使用的简单步骤

openeuler/distributed-beget入门教程:从安装到使用的简单步骤

openeuler/distributed-beget入门教程:从安装到使用的简单步骤 【免费下载链接】distributed-beget The parameter process to provide parameters(like udid.) for distributed components. 项目地址: https://gitcode.com/openeuler/distributed-beget 前往…

2026/7/3 19:26:49阅读更多 →
DDrawCompat:Windows 10/11经典游戏兼容性修复终极指南

DDrawCompat:Windows 10/11经典游戏兼容性修复终极指南

DDrawCompat:Windows 10/11经典游戏兼容性修复终极指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDraw…

2026/7/3 19:26:49阅读更多 →
SRC漏洞挖掘入门到进阶:从工具使用到逻辑漏洞实战指南

SRC漏洞挖掘入门到进阶:从工具使用到逻辑漏洞实战指南

1. 项目概述:从零到一,理解SRC漏洞挖掘的本质如果你对网络安全感兴趣,或者经常在技术社区看到“SRC”、“漏洞赏金”、“白帽子”这些词,心里痒痒的但又觉得门槛太高,那这篇内容就是为你准备的。SRC,全称Se…

2026/7/3 19:26:49阅读更多 →
5分钟快速上手:通达信缠论可视化插件CZSC.dll终极指南

5分钟快速上手:通达信缠论可视化插件CZSC.dll终极指南

5分钟快速上手:通达信缠论可视化插件CZSC.dll终极指南 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 缠论作为中国特色的技术分析体系,以其严谨的逻辑结构备受交易者关注。然而&…

2026/7/3 19:26:49阅读更多 →
Path of Building:流放之路角色构建的离线计算解决方案

Path of Building:流放之路角色构建的离线计算解决方案

Path of Building:流放之路角色构建的离线计算解决方案 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 在《流放之路》这款深度复杂的ARPG游戏中,…

2026/7/3 19:26:49阅读更多 →
TC78H653FTG与PIC18F2525直流电机驱动方案详解

TC78H653FTG与PIC18F2525直流电机驱动方案详解

1. 项目背景与核心组件介绍在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,始终占据着重要地位。根据市场调研数据显示,全球直流电机市场规模在2023年已达到约215亿美元,其中直流有刷电机占比超…

2026/7/3 19:21:49阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/3 14:18:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/3 14:38:35阅读更多 →
LV3296与PIC18F45K22的UART通信与USB扩展方案

LV3296与PIC18F45K22的UART通信与USB扩展方案

1. LV3296与PIC18F45K22的硬件搭档解析在嵌入式数据采集系统中,LV3296条形码扫描模块与PIC18F45K22微控制器的组合堪称经典搭配。LV3296作为一款工业级条码扫描头,其核心是一颗高性能CMOS图像传感器,配合专用解码芯片,能自动识别包…

2026/7/3 0:03:41阅读更多 →
AI初创生存指南:6个月完成可信度验证闭环

AI初创生存指南:6个月完成可信度验证闭环

1. 这不是“逆袭指南”,而是一份AI初创公司真实生存手记“How To Beat Odds As an AI Startup?”——这个标题乍看像一句热血口号,但在我带过7个从0到1的AI产品团队、亲手踩过融资失败、技术债崩盘、客户POC卡在最后一公里等23类典型坑之后,…

2026/7/3 0:03:41阅读更多 →
多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

1. 这不是又一篇“AI趋势速览”,而是一份实操者手记:当多模态、推理链、检索增强与智能体协作真正撞进工程现场“LAI #73”这个编号本身就像一个暗号——它不属于某家大厂的白皮书,也不是学术会议的议程表,而是长期泡在模型训练集…

2026/7/3 0:03:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/3 1:12:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/3 1:36:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/3 2:08:15阅读更多 →