Skip to content

Fix SKLottieView animation not starting when IsAnimationEnabled toggled before Window assignment#333

Draft
Copilot wants to merge 3 commits intomainfrom
copilot/fix-sklottieview-animation-issue
Draft

Fix SKLottieView animation not starting when IsAnimationEnabled toggled before Window assignment#333
Copilot wants to merge 3 commits intomainfrom
copilot/fix-sklottieview-animation-issue

Conversation

Copy link
Contributor

Copilot AI commented Feb 5, 2026

SKLottieView with IsAnimationEnabled="False" in XAML cannot be re-enabled from code-behind. Setting IsAnimationEnabled = true appears to work but animation never runs.

Root Cause

When IsAnimationEnabled is set to true before the view has a Window:

  1. UpdateIsAnimationEnabled() starts a 16ms timer
  2. Timer callback immediately returns false (Window is null)
  3. No handler exists to restart when Window is assigned later

Changes

SKAnimatedSurfaceView.shared.cs

  • Add Window null check before starting timer in UpdateIsAnimationEnabled()
  • Override OnPropertyChanged to restart animation when Window property changes
private void UpdateIsAnimationEnabled()
{
    if (!this.IsLoadedEx())
        return;
    
    if (Window is null)  // New check prevents premature timer start
        return;
    
    // ... existing timer start logic
}

protected override void OnPropertyChanged(string? propertyName = null)
{
    base.OnPropertyChanged(propertyName);
    
    if (propertyName == nameof(Window))
    {
        UpdateIsAnimationEnabled();  // Restart animation when added to Window
    }
}

This ensures animation starts correctly regardless of initialization order between IsAnimationEnabled and Window assignment.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 0t3vsblobprodcus362.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet build tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/SkiaSharp.Extended/source/SkiaSharp.Extended/SkiaSharp.Extended.csproj --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true (dns block)
  • 1s1vsblobprodcus386.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/8E0510E7BE57D5CDD12984F1A8B1B374/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 2zrvsblobprodcus388.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet workload restore (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/A3667232A3D22B710FDE080B34BE347F/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 37bvsblobprodcus311.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/A444A7F4B86F65D3F2A7BCF8163D0596/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 4m6vsblobprodcus384.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet workload restore (dns block)
  • 7devsblobprodcus323.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/5B74F40C93A078C72D8DF238B871667A/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 7k6vsblobprodcus337.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/169BD6A679E70F1A8DB1754AF220F794/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • bcnvsblobprodcus378.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet build source/SkiaSharp.Extended.UI.Maui/SkiaSharp.Extended.UI.Maui.csproj -f net9.0-android35.0 (dns block)
    • Triggering command: /usr/bin/dotnet dotnet workload restore (dns block)
    • Triggering command: /usr/bin/dotnet dotnet build tests/SkiaSharp.Extended.UI.Maui.Tests/SkiaSharp.Extended.UI.Maui.Tests.csproj (dns block)
  • c78vsblobprodcus322.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet workload restore (dns block)
    • Triggering command: /usr/bin/dotnet dotnet build tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/SkiaSharp.Extended/tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true (dns block)
  • fdpvsblobprodcus345.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/5707D9CCD3909344C2384588AB311A3D/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/A3667232A3D22B710FDE080B34BE347F/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • frdvsblobprodcus327.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet build tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/SkiaSharp.Extended/tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/CB9CBA9383D5A238E2B9DD721B214239/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • imzvsblobprodcus368.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/D209161F91CDA5622BE85E6A2020A99D/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • kgfvsblobprodcus314.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/A444A7F4B86F65D3F2A7BCF8163D0596/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • lylvsblobprodcus31.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet build tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/SkiaSharp.Extended/tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true (dns block)
  • m16vsblobprodcus374.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/17F5F6D9D2176E6846B1D7AA9CBB2984/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • o3svsblobprodcus318.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet workload restore (dns block)
  • pdfvsblobprodcus380.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/91EEECFC80ED8D6FF706082129E4975F/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • rcxvsblobprodcus328.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet build tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/SkiaSharp.Extended/tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/97B6F2CA4656254F7A852783585D5FF8/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • tphvsblobprodcus375.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/A444A7F4B86F65D3F2A7BCF8163D0596/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • u6ovsblobprodcus377.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet build tests/SkiaSharp.Extended.Tests/SkiaSharp.Extended.Tests.csproj (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/SkiaSharp.Extended/source/SkiaSharp.Extended/SkiaSharp.Extended.csproj --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/D0CE446A70B8C279207B5D1C384112D1/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • ytvvsblobprodcus310.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/78EB6D0660D838F92C07DD472AF09142/missingpackages_workingdir --packages /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/SkiaSharp.Extended/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>[BUG] MAUI SKLottieView doesn't get enabled</issue_title>
<issue_description>Description

If you create a SKLottieView with IsAnimationEnabled="False", it won't get enabled even if you set IsAnimationEnabled="True" later from code behind.

Code

<skia:SKLottieView
  x:Name="animationView"
  Source="animation.json"
  HeightRequest="60"
  WidthRequest="60"
  Progress="0"
  IsAnimationEnabled="False"
  VerticalOptions="Center"
  HorizontalOptions="Center">

Expected Behavior

The animation status should be mutable. You should be able to set it to True/False to play/stop the animation. In Android works as expected.

Actual Behavior

In iOS once animation created with IsAnimationEnabled="False", won't play again even after setting IsAnimationEnabled="True" from code behind.

Basic Information

  • Version with issue: SkiaSharp.Extended.UI.Maui 2.0.0 (Tried 3.0.0-preview.7 but my application just crashes)
  • Last known good version: ?
  • IDE: Microsoft Visual Studio 17.10.1
  • Platform Target Frameworks:
    • Android: 28.0
    • iOS: 14.0
  • Target Devices:
    • Device iPhone 15 Plus iOS 17.4
    • Simulator iPhone 15 Plus iOS 17.4
      </issue_description>

Comments on the Issue (you are @copilot in this section)


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI and others added 2 commits February 5, 2026 03:16
Co-authored-by: mattleibow <1096616+mattleibow@users.noreply.github.com>
Co-authored-by: mattleibow <1096616+mattleibow@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix SKLottieView not enabling animation after initialization Fix SKLottieView animation not starting when IsAnimationEnabled toggled before Window assignment Feb 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] MAUI SKLottieView doesn't get enabled

2 participants