MAUI 自定义绘图入门

在2022的5月份,某软正式发布了 MAUI 跨平台 UI 框架。我本来想着趁六一儿童节放假来写几篇关于 MAUI 入门的博客,可惜发现我不擅长写很入门的博客。再加上 MAUI 似乎是为了赶发布日期而发布,只能勉强说能开发了,能用了。于是我就来开始假定大家是一个成熟的 MAUI 开发者了,开始进入复杂控件自绘的自定义绘图渲染的博客

在 MAUI 里面,默认将会在 Microsoft.Maui.Dependencies 引用 Microsoft.Maui.Graphics 的负载。在 Microsoft.Maui.Graphics 里,提供了跨平台的独立绘图能力,在 GitHub 上作为独立的开源项目,开源在 https://github.com/dotnet/Microsoft.Maui.Graphics

也如 Microsoft.Maui.Graphics 在它开源项目里面描述的一样,使用 Microsoft.Maui.Graphics 不会被局限于 MAUI 框架上,可以在任何的应用框架下使用上 Microsoft.Maui.Graphics 库,就和其他的 NuGet 包一样去使用。换句话说,我可以在 WPF 或 WinForms 或者是纯控制台里面使用 Microsoft.Maui.Graphics 进行绘图

另外,我也可以自己注入 Microsoft.Maui.Graphics 的实现定义,扩展其他渲染引擎或框架作为绘图的基础支持

回到主题,本文将告诉大家如何在 MAUI 里面使用 Microsoft.Maui.Graphics 提供的绘图能力进自绘。对于任何的 UI 框架来说,只要能实现好的自绘,就能扩展出超级多炫酷的界面效果,同时也可以方便将旧技术积累迁移到此 UI 框架上。无疑,在MAUI上就实现了这一点

这部分的内容,在当前是 2022.06 还没有多少文档,官方的文档里面都说 MAUI 还是预览版,别听官方说的,在5月就发布了。发布在 6.0.312 的 dotnet 版本上

在 MAUI 里面接入 Microsoft.Maui.Graphics 从而实现自绘是有框架层的支持的,只是实现的方式稍微有点绕

先安装 VisualStudio 2022 预览版用于新建 MAUI 项目。由于 MAUI 的发布和 VisualStudio 的发布日期对不上,现在只能通过预览版本了,不过后续会合入到正式版本

在新建的项目里面,新建一个类型,让这个类型继承 Microsoft.Maui.Graphics.IDrawable 接口。于是此类型即可通过实现 Draw 方法,被框架层调用到,从而在 Draw 方法里面执行绘图。例如和官方的例子一样,将此类型命名为 GraphicsDrawable 如以下代码

public class GraphicsDrawable : IDrawable{    public void Draw(ICanvas canvas, RectF dirtyRect){}
}

在 Draw 里面通过 DrawLine 画出一段线条。为了让线条可见,再加上设置线条的颜色和粗细值的代码

public void Draw(ICanvas canvas, RectF dirtyRect){canvas.StrokeColor = Colors.Red;canvas.StrokeSize = 6;canvas.DrawLine(10, 10, 90, 100);}

完成了这一步之后,还需要将 GraphicsDrawable 接入到 MAUI 框架里面

在 MAUI 框架里提供了 GraphicsView 元素用来对接 Microsoft.Maui.Graphics 的绘图功能。在 GraphicsView 的 Drawable 属性里面,就是用来传入 IDrawable 的对象的

对接的第一步是将咱写的 GraphicsDrawable 类型定义成资源,方便后续代码都在 XAML 里面实现。为了演示方便,以下代码都写在 MainPage.xaml 里

<?xml version="1.0" encoding="utf-8" ?><ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:local="clr-namespace:HejawrawceaJurheakelerela"x:Class="HejawrawceaJurheakelerela.MainPage"><ContentPage.Resources><local:GraphicsDrawable x:Key="GraphicsDrawable"></local:GraphicsDrawable></ContentPage.Resources></ContentPage>

还请将以上代码的 local 的命名空间更换为你的项目对应的命名空间

接着在 GraphicsView 里使用以上定义的资源,如以下代码

<GraphicsView x:Name="GraphicsView" WidthRequest="100" HeightRequest="100" Drawable="{StaticResource GraphicsDrawable}"></GraphicsView>

运行程序,即可看到界面画出一条线

52773393a0c7588da6b6bfaf82ec85f6.png

可以看到调用堆栈如下

e414ce9eefabec49dbfaac30bb52de9e.png

也就是实际的实现是由 Win2D 提供的

以上是在 Windows 平台上运行的,那既然 MAUI 宣称是跨平台的,那在其他的平台上又是如何

接下来在安卓平台上跑一下

34f0b771741da04285dc5589b45875b7.png

同样也看一下调用堆栈

26577fe595feb00374566c3f9d9e61b0.png

可以看到调用堆栈和 Windows 平台上,符合预期的不同,也就是说 Microsoft.Maui.Graphics 根据不同的平台选用不同的绘制底层技术

这就是 MAUI 自绘的开始,如何绘制出漂亮的界面就靠大家发挥

试用了几天的 MAUI 发现了比上次我用预览版本有了很大的进步,比如 Windows 端的调试部署极大的提升。当然,这不是 MAUI 团队的努力,而是 Windows App SDK 团队的努力,将原本的 UWP 很多逗比逻辑和交互给优化的。自然,不足之处也是有的,那就是 MAUI 团队还是太小了,好多东西还没磨完,不过这会随着开发的投入逐步完善。现在的 MAUI 已经达到了 Demo 级,小工具级可用的状态。推荐大家要是有什么小工具,选择一下 MAUI 试试水也不错

本文代码放在github 和 gitee 欢迎访问

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git initgit remote add origin https://gitee.com/lindexi/lindexi_gd.gitgit pull origin 2da0315302ae504f50c4c3baa47fe3f45d0cdc26

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git

获取代码之后,进入 HejawrawceaJurheakelerela 文件夹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【三维激光扫描】实验02:StonexSiScan新建项目、加载点云数据

文章目录 1. 新建工程2. 打开工程3. 加载点云1. 新建工程 打开StonexSiScan点云后处理软件,点击【新建】按钮。 选择工程存放路径,输入工程名称。 2. 打开工程 点击【打开】按钮。

eBPF 在云原生环境中的应用

端午假期&#xff0c;我翻译了 OReilly 的报告《什么是 eBPF》&#xff0c;其中我觉得第五章「云原生环境中的 eBPF」解答了我心中的很多疑惑&#xff0c;比较不错&#xff0c;分享给大家。下面是第五章译文。《什么是 eBPF》中文版封面近年来&#xff0c;云原生应用已呈指数级…

使用HtmlAgilityPack抓取网页数据

XPath路径表达式&#xff0c;主要是对XML文档中的节点进行搜索&#xff0c;通过XPath表达式可以对XML文档中的节点位置进行快速定位和访问&#xff0c;html也是也是一种类似于xml的标记语言&#xff0c;但是语法没有那么严谨&#xff0c;在codeplex里有一个开源项目HtmlAgility…

企业有了程序员为什么还要用 低代码/无代码

一、备受“争议”的无代码/低代码开发 在看这篇内容时&#xff0c;我们要知道&#xff0c;技术无时无刻不在进行发展&#xff0c;IT技术更是如此&#xff0c;快速的技术更新使得程序员在进行应用开发时效率更高&#xff1b;我记得在十多年前&#xff0c;开发一个普通的 HTML 页…

【三维激光扫描技术】原理、方法及实验图文教程目录

《三维激光扫描技术》专栏讲述目前最先进、最流行的三维激光技术&#xff0c;包括三维激光扫描技术原理&#xff0c;三维测距原理&#xff0c;国内外三维扫描设备&#xff0c;点云特点&#xff0c;三维建模&#xff0c;三维激光优势、应用领域&#xff0c;应用技术案例等。 文章…

求最长回文串

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 转载于:https://www.cnblogs.com/yangscode/p/5017527.html

实训三(cocos2dx 3.x 打包apk)

上一篇文章《实训二&#xff08;cocos2dx 2.x 打包apk&#xff09;》简单的讲述的利用cocos2dx 2.x引擎在windows平台上打包apk的方法与过程&#xff0c;本文将介绍3.x版本引擎&#xff0c;如何打包apk的问题。 首先&#xff0c;Cygwin在3.x版本引擎上已经用不到了&#xff0c;…

网页精美动效/动画制作 按钮鼠标悬浮动效基础 01《炫彩网页 iVX 无代码动效/动画制作》

编辑器地址&#xff1a;https://editor.ivx.cn/ 一、准备工作 进入编辑页后&#xff0c;选择其中一种应用类型创建应用&#xff0c;在此以相对应用作为示例&#xff1a; 创建好应用后在此选择对应的屏幕作为示例演示&#xff0c;在此选择电脑屏幕作为对应的大小&#xff1a…

Java并发编程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable

一、Exectuor框架简介 Java从1.5版本开始&#xff0c;为简化多线程并发编程&#xff0c;引入全新的并发编程包:java.util.concurrent及其并发编程框架&#xff08;Executor框架&#xff09;。 Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类&a…

网页精美动效/动画制作 按钮鼠标悬浮动效的注意点 02《炫彩网页 iVX 无代码动效/动画制作》

一、按钮动效的使用 在上一节中&#xff0c;我们创建了一个动效&#xff0c;但是并没有使用&#xff0c;在此我们给按钮设置一个悬浮事件&#xff0c;当鼠标悬浮在按钮之上后就调用该动效&#xff0c;点击按钮添加事件&#xff1a; 点击按钮添加事件后将会出现一个事件编辑框…

WPF 实现带明细的环形图表

本文经原作者授权以原创方式二次分享&#xff0c;欢迎转载、分享。原文作者&#xff1a;普通的地球人原文地址&#xff1a;https://www.cnblogs.com/tsliwei/p/7155616.htmlGithub地址&#xff1a;https://github.com/WPFDevelopersOrg/WPFDevelopers.Charts大体思路图表使用Ar…

几行代码搞定树形文本转XML和JSON

由于需要将百度脑图的内容导出为xml或者json格式&#xff0c;发现百度脑图只能导出为树形文本&#xff0c;所以就写了个小应用给编辑用。/// <summary>/// 树形文本转xml/// </summary>/// <param name"txt"></param>/// <returns><…

《iVX 高仿美团APP制作移动端完整项目》01 标题需求分析思路及制作流程

点击整个专栏查看其它系列文章 &#xff08;系列文章更新中…&#xff09;&#xff1a;《iVX 高仿美团APP制作移动端完整项目》 项目界面预览&#xff1a; 一、创建项目 首先打开在线编辑器地址&#xff1a;https://editor.ivx.cn/ 随后登录帐号后创建一个相对应用项目&…

zepto源码研究 - ajax.js($.ajaxJSONP 的分析)

简要&#xff1a;jsonp是一种服务器和客户端信息传递方式&#xff0c;一般是利用script元素赋值src来发起请求。一般凡是带有src属性的元素发起的请求都是可以跨域的。 那么jsonp是如何获取服务器的数据的呢&#xff1f; jsonp先将指定的一个函数名作为url后面的参数传递到服务…

创建 overlay 网络 - 每天5分钟玩转 Docker 容器技术(50)

上一节我们搭建好实验环境&#xff0c;配置并运行了consul&#xff0c;今天开始创建 overlay 网络。 在 host1 中创建 overlay 网络 ov_net1&#xff1a; -d overlay 指定 driver 为 overaly。 docker network ls 查看当前网络&#xff1a; 注意到 ov_net1 的 SCOPE 为 global&…

Js+Css 控制iframe内容自动缩放

竖屏横屏效果<div class"h5box"> <iframe src"http://player.youku.com/embed/XMTI4MjU5OTA3Mg" frameborder"0" width"1280px" height"720px"></iframe> </div><script type"tex…

西北冬日的校园很静谧,却不失韵味,因为有我们美好的青春!

冬日的校园&#xff0c;从枯黄的落叶开始。。。 落叶与栅栏情深。 冬日的篮球场上&#xff0c;不乏挥汗如雨的你&#xff0c;因为你是梦想与自由的追逐者&#xff0c;你可以战胜自己的懒惰。 我们的测量实训场&#xff0c;英雄的用武之地。 测桩&#xff1a;测量的控制点&#…

ps、top 、free查看用户资源信息

查看root用户的进程信息。 运行命令&#xff1a; ps -u root 查看oracle用户的进程信息。 运行命令&#xff1a; ps -u oracle 若查看现在的资源占用情况&#xff0c;如何呢&#xff1f; 运行命令&#xff1a; top 可以很详细的查看各个进程的运行情况。 若查看内存使用情…

《iVX 高仿美团APP制作移动端完整项目》02 搜索、搜索提示及类别需求分析思路及制作流程

点击整个专栏查看其它系列文章 &#xff08;系列文章更新中…&#xff09;&#xff1a;《iVX 高仿美团APP制作移动端完整项目》 项目界面预览&#xff1a; 一、搜索制作 在上一节中我们完成了标题头的制作&#xff0c;接下来我们查看如何制作搜索栏以及分类区制作。 首先我…

10.2.0.5启动enterprise manager

10.2.0.5启动enterprise manager OEM作为一个实用工具&#xff0c;随着10g和11g的普及&#xff0c;OEM功能越来越强大&#xff0c;oem也应用越来越广泛。但是如果是10.2.0.5的版本&#xff0c;并且安装时间在2010年1月之后&#xff0c;可能会遇到OEM无法启动的情况&#xff0c;…