动画元素
-
在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