首页 > 其他分享 >Maui学习笔记-CommunityToolkit.Maui动画案例

Maui学习笔记-CommunityToolkit.Maui动画案例

时间:2025-01-19 18:27:57浏览次数:3  
标签:动画 BaseAnimation CommunityToolkit JSON Maui public

动画元素

  • 在CommunityToolkit.Maui工具包中提供了AnimationBehavior 和 BaseAnimation 类。

  • AnimationBehavior作用在视图UI元素,并用作动画的容器。

  • BaseAnimation是实现动画逻辑的基类。

  • 下面这个案例是使一个按钮实现淡入淡出的效果

在主页的隐藏文件中创建一个类继承BaseAnimation

public class AttentionAnimation:BaseAnimation
{
    public override async Task Animate(VisualElement view, CancellationToken token = default)
    {
      //动画循环次数
        for (var i = 0; i <6; i++)
        {
            await view.FadeTo(0.5, Length, Easing);
            await view.FadeTo(1, Length, Easing);
        }
    }
}

 主页代码

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MauiApp2;"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             x:Class="MauiApp2.MainPage">
    <Grid>
        <Button Text="!"
                Margin="30"
                HeightRequest="100"
                WidthRequest="100"
                VerticalOptions="Center"
                HorizontalOptions="Center"
                Padding="5"
                CornerRadius="20">
            <Button.Behaviors>
                <toolkit:AnimationBehavior EventName="Loaded">
                    <toolkit:AnimationBehavior.AnimationType>
                        <local:AttentionAnimation
                           //控制动画持续时间
                            Length="500"
                            Easing="{x:Static Easing.SpringIn}"/>
                    </toolkit:AnimationBehavior.AnimationType>
                </toolkit:AnimationBehavior>
            </Button.Behaviors>
        </Button>
    </Grid>
   
</ContentPage>

         

  • AnimationType接收从BaseAnimation抽象类继承的实例。

  • AnimationBehavior该类可以在XAML中分配动画并根据特定条件出发动画。可以将它视为动画容器和基础结构,它应用于AnimationType分配给它的属性。

IOS下运行程序

使用Lottie 动画创建动态图形 

  • Lottie是一种基于矢量的JSON编码动画格式。

  • 可以在它的官网上找到许多现成的动画。

  • 首先我们从网站上找到一个动画,下载它的JSON文件,放在项目中的Resource/raw目录下。文件属性设置为MauiAsset。

  • 安装nuget包,SkiaSharp.Extended.UI.Maui、CommunityToolkit.Maui、CommunityToolkit.MVVM。并在MauiProgram.cs中对其引用。

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .UseSkiaSharp()
        .UseMauiCommunityToolkit()
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
        });
    
  • 接下来创建一个ViewModel文件在页面添加提示语句和命令。

public partial class MyViewModel:ObservableObject
{
    [ObservableProperty] private string statusMessage = "Hi";

    [RelayCommand]
    async Task SayHi()
    {
        await Task.Delay(5000);
        StatusMessage = "点击开始重复";
    }
}
  • 主页中需要对SKiaSharp引用。

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:skia="clr-namespace:SkiaSharp.Extended.UI.Controls;assembly=SkiaSharp.Extended.UI"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MauiApp2;"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             x:DataType="{x:Type local:MyViewModel}"
             x:Class="MauiApp2.MainPage">
    <ContentPage.BindingContext>
        <local:MyViewModel/>
    </ContentPage.BindingContext>
    <ContentPage.Resources>
        <toolkit:InvertedBoolConverter x:Key="InvertedBoolConverter"/>
    </ContentPage.Resources>
    <Grid RowDefinitions="*,50">
        <Label
            Text="{Binding StatusMessage}"
            HorizontalOptions="Center"
            VerticalOptions="Center"
            FontSize="30"
            IsVisible="{Binding SayHiCommand.IsRunning,Converter={StaticResource InvertedBoolConverter}}"/>
        
        <skia:SKLottieView 
            //“-1”代表动画可以重复
            RepeatCount="-1"
            IsVisible="{Binding SayHiCommand.IsRunning}" 
            Source="run01.json"/>
        
        <Button
            Text="开始"
            Command="{Binding SayHiCommand}"
            Grid.Row="1"/>
    </Grid>
   
</ContentPage>
  • SKLottieView它可以解析JSON动画文件并使用SkiaSharp引擎来绘制它。Skia是一个跨平台的图形库,可以在Android、Flutter和其他平台使用。

  • Lottie动画主要优势在于可以缩放大小,而无需担心它的质量,轻量级的JSON文件,占用空间比GIF少得多。

IOS下运行程序

 ​​​​​​​

标签:动画,BaseAnimation,CommunityToolkit,JSON,Maui,public
From: https://blog.csdn.net/hivv510/article/details/145245454

相关文章

  • WPF动画-物体跟随轨迹进行运动
     主要用到:RenderTransformOrigin MatrixTransform  MatrixAnimationUsingPath DoesRotateWithTangent直接上代码<Grid.Resources><PathGeometryx:Key="PATH"Figures="M0,0C9.3627259,14.08419911.524114,20.69051435.333333,23.66666745.377......
  • 鸿蒙开发教程实战案例源码分享-tab切换动画
    鸿蒙开发教程实战案例源码分享-tab切换动画往往会看到tab切换时有个显示变大的动画,不会那么突兀。关键是用到animation动画一、思路:用animation二、效果图:看视频更直观点:【2025最新】鸿蒙开发教程实战案例源码分享-推荐和最新tab切换动画三、关键代码:@Compon......
  • 创建一个.NET MAUI应用(二)
    开发本机跨平台.NET多平台应用UI(.NETMAUI)应用需要VisualStudio202217.12或更高版本 安装若要创建.NETMAUI应用,需要下载最新版本的VisualStudio2022:下载VisualStudio2022社区版下载VisualStudio2022专业版下载VisualStudio2022企业......
  • 动画+使用动画实现呼吸效果
    <动画>---->使用@keyframes+动画名字,动画的改变可以从from到to,或者是从0%到100%变化,变化不知可以变化背景颜色,还可以变化包括      长高之类的CSS属性      在对应的盒子中添加animation属性,animation:name(设置动画的名称)duration(设置动画的持......
  • Tauri教程-进阶篇-第一节 自定义启动画面
    “如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》“有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》“维持现状意味着空耗你的努力和生命。”——纪伯伦Tauri技术教程*第五章Tauri的进阶教程第一节自定义启动画面......
  • 中科大提出新视频流制作动画解决方案RAIN,可实现真人表情移植和动漫实时动画。
    中科大提出了一种新的视频流制作动画解决方案RAIN,能够使用单个RTX4090GPU实时低延迟地为无限视频流制作动画。RAIN的核心思想是有效地计算不同噪声水平和长时间间隔的帧标记注意力,同时对比以前基于流的方法多得多的帧标记进行去噪。这种设计允许RAIN生成具有更短延迟和更......
  • 【亲测能用】二维卡通动画制作软件:Smith Micro Moho Pro v14.3 专业版
    SmithMicroMohov14.3是一款专为动画师、设计师和数字艺术家设计的强大而易用的2D动画软件。它在人物绘制、动画制作和特效处理方面提供了全面的支持,是动画创作的理想选择。Mohov14.3引入了先进的智能骨骼系统,让动画师能够轻松控制角色的关节弯曲和变形,实现复杂而自然的运动和......
  • manim边做边学--动画联动
    今天介绍Manim中的动画联动的技巧,在数学动画中,动画联动是常用的功能,比如讲解平面几何中三角形与圆的位置关系变化,通过动画联动可以让圆沿着三角形的边滚动,或者让三角形的顶点在圆上移动,从而直观地展示内切、外接等几何关系。总之,通过动画联动,可以将复杂的概念、关系或变化过程以......
  • 如何使用CSS3或JavaScript实现页面动画效果?
    要使用CSS3或JavaScript实现页面动画效果,可以根据具体需求选择合适的方法。以下是基于我搜索到的资料,详细说明如何使用CSS3和JavaScript实现页面动画效果:使用CSS3实现页面动画效果1.CSS3过渡和动画CSS3提供了强大的过渡和动画功能,可以轻松创建元素状态改变时的平滑效果。......
  • css 布局及动画应用(flex+transform+transition+animation)
    文章目录css布局及动画应用animationtransform,transition,animation综合应用实例代码实例解释css布局及动画应用Display用法作用:用于控制元素的显示类型,如块级元素、内联元素、无显示等。常见属性值及示例:block:使元素显示为块级元素,会独占一行,并且可以设......