有点酷,使用 .NET MAUI 探索太空

128136dc2107d07f93cf76ae28ab16e2.gif

  设计  

我准备用 .NET Maui 实现一个非常有意思的 "前往太空" 的程序。第一步,需要图片素材,我使用了 Aan Ragil 的一组非常棒的 Dribbble 素材图片。

当然,你也可以在最下面的链接进行下载。

d7edbe65f6f132828293f624a431eff0.png

  实现  

这个应用程序的完整源代码可以在 Github 上访问并下载。我们总共需要做三个页面。

  初始化项目  

我创建了一个空的 .NET Maui 程序。然后,我禁用了每个页面上的导航栏,然后设置了背景颜色,主要是修改了 App.xaml 文件。

<!-- Content Page Style -->
<Style TargetType="ContentPage" ApplyToDerivedTypes="True"><Setter Property="NavigationPage.HasNavigationBar" Value="False" /><Setter Property="BackgroundColor" Value="{StaticResource PageBackgroundColor}" /><Setter Property="Padding" Value="0"/>
</Style><!-- Navigation Page -->
<Style TargetType="NavigationPage" ApplyToDerivedTypes="True"><Setter Property="BackgroundColor" Value="{StaticResource PageBackgroundColor}" />
</Style>

对于安卓设备, 使用 Android LifeCycle 事件让状态栏变为半透明。

builder.UseMauiApp<App>().ConfigureFonts(fonts =>{fonts.AddFont("Montserrat-Medium.ttf", "RegularFont");fonts.AddFont("Montserrat-SemiBold.ttf", "MediumFont");fonts.AddFont("Montserrat-Bold.ttf", "BoldFont");}).ConfigureLifecycleEvents(events =>{
#if ANDROIDevents.AddAndroid(android => android.OnCreate((activity, bundle) => MakeStatusBarTranslucent(activity)));static void MakeStatusBarTranslucent(Android.App.Activity activity){activity.Window.SetFlags(Android.Views.WindowManagerFlags.LayoutNoLimits, Android.Views.WindowManagerFlags.LayoutNoLimits);activity.Window.ClearFlags(Android.Views.WindowManagerFlags.TranslucentStatus);activity.Window.SetStatusBarColor(Android.Graphics.Color.Transparent);}
#endif});

为了让视图覆盖底部,每个页面使用了 IgnoreSafeArea 属性。

<ContentPage> <Grid IgnoreSafeArea="{OnPlatform Android=False, iOS=True}"> </Grid> 
</ContentPage>

为了简单起见,我没有使用 MVVM 模式,而是普通的 Maui UI 结构。创建了一个 **Planet **类来保存有关行星的信息,并创建了一个 PlanetService 服务。

初始页

接下来是初始页面,我把它分成了两部分。

6eb0a2d1dcaa04a0b5aeb4df2812f65b.png

上部分由每个行星的单独图像组成的。我使用了 HorizontalOptions、VerticalOptions、TranslationX、TranslationY、WidthRequest 和 HeightRequest 控制每个图像的位置和大小。

<Image Source="earth.png" VerticalOptions="Start" HorizontalOptions ="Center" TranslationX="-48" TranslationY="148" WidthRequest="96" HeightRequest="96"/>

下部分,我没有使用 Frame 控件,而是使用了更轻量的 Border 控件。

<Border
Padding="24,32"
BackgroundColor="{StaticResource FrameBackgroundColor}"
Stroke="{StaticResource BorderColor}"
HorizontalOptions="Fill"
VerticalOptions="End"
Margin="20">
<Border.StrokeShape><RoundRectangle CornerRadius="24"/>
</Border.StrokeShape><VerticalStackLayoutSpacing="16"><LabelHorizontalOptions="Center"HorizontalTextAlignment="Center"Style="{StaticResource IntroPageHeaderStyle}"Text="Hello!"/><LabelHorizontalOptions="Center"HorizontalTextAlignment="Center"LineBreakMode="WordWrap"Style="{StaticResource IntroPageTextStyle}"Text="Want to know and explain all things about the planets in the Milky Way galaxy?"/><ButtonStyle="{StaticResource ButtonStyle}"Text="Explore Now"HorizontalOptions="Center"Margin="0,12,0,6"Clicked="ExploreNow_Clicked"/></VerticalStackLayout></Border>

看一下第一个页面的效果。

c3b13d5cada42deddba1fe570678d980.png

看起来还不错吧!我们还可以设置淡入的效果,加一些动画。

protected override async void OnAppearing(){base.OnAppearing();if (this.AnimationIsRunning("TransitionAnimation"))return;var parentAnimation = new Animation();//Planets AnimationparentAnimation.Add(0, 0.2, new Animation(v => imgMercury.Opacity = v, 0, 1, Easing.CubicIn));parentAnimation.Add(0.1, 0.3, new Animation(v => imgVenus.Opacity = v, 0, 1, Easing.CubicIn));parentAnimation.Add(0.2, 0.4, new Animation(v => imgEarth.Opacity = v, 0, 1, Easing.CubicIn));parentAnimation.Add(0.3, 0.5, new Animation(v => imgMars.Opacity = v, 0, 1, Easing.CubicIn));parentAnimation.Add(0.4, 0.6, new Animation(v => imgJupiter.Opacity = v, 0, 1, Easing.CubicIn));parentAnimation.Add(0.5, 0.7, new Animation(v => imgSaturn.Opacity = v, 0, 1, Easing.CubicIn));parentAnimation.Add(0.6, 0.8, new Animation(v => imgNeptune.Opacity = v, 0, 1, Easing.CubicIn));parentAnimation.Add(0.7, 0.9, new Animation(v => imgUranus.Opacity = v, 0, 1, Easing.CubicIn));//Intro Box AnimationparentAnimation.Add(0.7, 1, new Animation(v => frmIntro.Opacity = v, 0, 1, Easing.CubicIn));//Commit the animationparentAnimation.Commit(this, "TransitionAnimation", 16, 3000, null, null);}

差不多完成了,我们看一下在手机上最后的效果,非常酷!

0d18231a17ec18cf4a3c567e02e5069d.gif

你可以在下面的地址找到它的源代码和素材信息。

https://github.com/naweed/MauiPlanets

https://dribbble.com/shots/15592060-Planet-Mobile-App

END

89149302792a6f9f7a90e93539a400a5.gif

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

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

相关文章

实例讲解——系统登录

一&#xff0c;程序分析 首先使用参数的方式输入用户名和密码&#xff0c;所以&#xff0c;首先要判断输入参数的个数是否合法&#xff0c;如果不合法&#xff0c;则必须提示程序执行不对&#xff0c;并退出。 如果正确输入&#xff0c;则可以进行密码和用户名的验证&#xff0…

【Microsoft Office】Word 2019空格下划线不显示的解决办法

解决办法&#xff1a;点击【文件】→【选项】→【高级】选项卡→勾选【为尾部空格添加下划线(U)】&#xff0c;解决&#xff01;

1.安装

转自&#xff1a;http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html Mocha&#xff08;发音"摩卡"&#xff09;诞生于2011年&#xff0c;是现在最流行的JavaScript测试框架之一&#xff0c;在浏览器和Node环境都可以使用。 所谓"测试框…

SkiaSharp 之 WPF 自绘弹跳球(案例版)

熟悉下SkiaSharp的基础操作&#xff0c;这次搞个弹跳球效果&#xff0c;实现后&#xff0c;发现效果还真不错。大概效果如下:原理分析先是实现了网格效果&#xff0c;这个比较简单&#xff0c;直接横线&#xff0c;竖线&#xff0c;就OK了。另外一个就是随机一个圆形&#xff0…

Windows11 发布更新 Insider Preview Build 22000.100

微软今天凌晨向开发频道中的所有用户发布Windows 11 Insider Preview Build 22000.100&#xff01; 变化和改进 我们已经开始在 Dev Channel 中将 Chat 从 Microsoft Teams 推广到 Insiders。不是每个人都会马上看到&#xff0c;任务栏右下方的隐藏图标弹出窗口已更新&#x…

常见RGB格式

计算机世界中&#xff0c;最终对于颜色和画面的显示&#xff0c;更多的采用的是RGB模式&#xff0c;这里记录一下常见的RGB格式。任何计算机设备以及智能终端等&#xff0c;呈现在我们眼前的色彩实际上便是红绿蓝三基色不同的组合&#xff0c;RGB实际上就是三基色的组合&#x…

《ASP.NET Core 6框架揭秘》实例演示[04]:自定义依赖注入框架

ASP.NET Core框架建立在一个依赖注入框架之上&#xff0c;已注入的方式消费服务已经成为了ASP.NET Core基本的编程模式。为了使读者能够更好地理解原生的注入框架框架&#xff0c;我按照类似的设计创建了一个简易版本的依赖注入框架&#xff0c;并它命名为“Cat”。本篇提供的四…

【QGIS入门实战精品教程】4.8:QGIS如何下载SRTM数字高程模型DEM?

本文讲解QGIS中下载SRTM数字高程模型DEM,以黑龙江省塔河县为例。 图幅效果: 最终效果: 文章目录 1. 下载安装STRM Download插件2. 加载矢量数据,读取范围3. 下载STRM4. DEM拼接5. DEM裁剪1. 下载安装STRM Download插件 点击【插件】→【管理并安装插件】。 在搜索框中输入…

Win11 恢复设置Win10任务栏、快速启动栏及右键菜单(Win11 22000.100版本测试通过)

恢复方法 按下边路径添加 UndockingDisabled项&#xff0c;DWORD (32-bit)值为1&#xff1a; [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell\Update\Packages] "UndockingDisabled"dword:00000001显示效果 已知问题 开始按钮点击无反应&a…

vue vue-router vuex element-ui axios 写一个代理平台的学习笔记(十一)构思商品页面...

在写商品页面product.vue之前&#xff0c;我应该思考一下&#xff0c;商品页面要实现那些功能&#xff0c;该不如布局&#xff1f;要实现的功能 1、所有商品列表的展示2、分类商品的列表展示 3、搜索商品或得列表展示4、单一商品的详细页面5、商品列表分页功能6、还没想到的...…

【ArcGIS Pro微课1000例】0019:ArcGIS Pro从海洋的视角看世界---海洋投影(Spilhaus Projection)

从海洋的视角看世界: 世界地图大多是以陆地为主要载体,如果以海洋为主角,就需要使用一种海洋投影。该投影以Spilhaus博士的名称命名。ArcGIS Pro自2.5版本以来提供了Spilhaus Projection。 投影效果预览: 接下来演示ArcGIS Pro 2.8中海洋投影的转换方法: 1. 新建一个工程…

有人撸了个网页版win11,惊艳!

演示地址&#xff1a;https://win11.blueedge.me/ Github地址&#xff1a;https://github.com/blueedgetechno/windows11

Vue3+.NET6+C#10,最近优质前后端分离项目汇总

据说80%的WEB开发都是管理后台&#xff0c;一套开源的优秀管理后台开发模板堪称福音&#xff01;分享一套Vue3 Axios TS Vite Element Plus .NET 6 WebAPI JWT SqlSugar的前后端分离架构的通用管理后台源码数据库脚本&#xff0c;还有与之配套录制的一组视频教程&#xff0c;全…

C++ 对象的内 存布局(下)

原文地址&#xff1a;http://blog.csdn.net/haoel/article/details/3081385 (注:看本文的时候由于宿舍快断电了,来不及细看,所以怕自己忘记,先贴出来.不排除文章有错误,大家自己测试一下.) 重复继承 下面我们再来看看&#xff0c;发生重复继承的情况。所谓重复继承&#xff0c;…

【GIS风暴】一文彻底弄懂数字地形(DEM、DOM、TDOM、DSM)的区别与联系

在2021自然资源部发布的《实景三维中国建设技术大纲(2021版)》中,空间数据部分包括“数字高程模型(DEM)、数字表面模型(DSM)、数字正射影像(DOM)、真正射影像(TDOM)、倾斜摄影三维模型、激光点云等。” 那么到底什么是DEM、DOM、TDOM、DSM,它们之间又有什么用的区别…

什么是“异步 Request-Reply”模式?编程如何实现?

在某些情况下&#xff0c;WEB API 可能需要很长时间来处理请求&#xff0c;而客户端如果一直等待工作完成是不可行的&#xff0c;比如连接超时等。这时&#xff0c;可以使用“异步 Request-Reply 模式”。异步 Request-Reply 模式异步 Request-Reply 模式是指&#xff1a;在后端…

【测绘程序设计】Excel度分秒(° ‘ “)转换度(°)模板附代码超实用版

在实际工作中,无论是ArcGIS中,还是CASS中,作图时需要将GPS实测的经纬度度分秒( ’ ")坐标转换为度(),在前面的文章中介绍了C#中将度分秒转为度的转换程序,本文讲解在Excel中快速度分秒( ’ ")转换度(),提高工作效率。 文章目录 准备工作编写代码注意事…

IO扩展控件(System.IO.Abstractions)

刚看到这个Namespace的时候还以为是.Net Framework里自带的包&#xff0c;结果查了一圈无任何结果。果断上Github搜索&#xff0c;一击即中 https://github.com/tathamoddie/System.IO.Abstractions先翻译下开发者给出的简单说明&#xff0c;今后再慢慢使用类似于System.Web.Ab…

[转]面向对象(1、三大特征;2、六大原则)

目录 一、面向对象的概述&#xff1a; 二、封装&#xff1a; 1、封装概述 2、封装原则 3、封装好处 4、封装坏处 5、封装代码展示 三、继承&#xff1a; 1、概念&#xff1a; 2、实现格式&#xff1a; 3、特点&#xff1a; 4、好处&#xff1a; 5、弊端&#xff1…

【测绘程序设计】C#将度分秒(° ‘ “)转换度(°)程序实现(附源码)

在实际工作中,无论是ArcGIS中,还是CASS中,作图时需要将GPS实测的经纬度度分秒( ’ ")坐标转换为度(),在前面的文章中介绍了Excel中将度分秒转为度的转换程序,本文讲解在Visual Studio中,采用C#语言实现快速度分秒( ’ ")转换度(),提高工作效率。 案例…