update:倒计时
This commit is contained in:
parent
4d9f5d262a
commit
458e0ceac8
@ -1,11 +1,15 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using WpfAnimatedGif;
|
||||||
|
|
||||||
namespace Wpf_AiSportsMicrospace.Common
|
namespace Wpf_AiSportsMicrospace.Common
|
||||||
{
|
{
|
||||||
@ -91,5 +95,118 @@ namespace Wpf_AiSportsMicrospace.Common
|
|||||||
});
|
});
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//public static Uri countDownGif = new Uri("/Resources/Img/Album/1.gif", UriKind.Relative);
|
||||||
|
|
||||||
|
//倒计时动画
|
||||||
|
public static Grid GetCountdownAnimation(Grid needAnimationGrid)
|
||||||
|
{
|
||||||
|
//string projectRoot = Path.Combine(AppContext.BaseDirectory, @"..\..\..");
|
||||||
|
//string gifPath = Path.Combine(projectRoot, "Resources", "Img", "gif" , "time_3.gif");
|
||||||
|
//var uri = new Uri(gifPath, UriKind.Absolute);
|
||||||
|
//var uri = new Uri("/Resources/Img/gif/time_3.gif", UriKind.Relative);
|
||||||
|
BitmapImage uri = GetGif("/time_3.gif");
|
||||||
|
var grid = new Grid
|
||||||
|
{
|
||||||
|
Height = 1080,
|
||||||
|
Width = 1920,
|
||||||
|
Name = "countdownGridAnimation",
|
||||||
|
};
|
||||||
|
|
||||||
|
var border = new Border
|
||||||
|
{
|
||||||
|
Height = 1080,
|
||||||
|
Width = 1920,
|
||||||
|
Background = new SolidColorBrush(Color.FromArgb(128, 0, 0, 0)), // 半透明黑色背景
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center
|
||||||
|
};
|
||||||
|
grid.Children.Add(border);
|
||||||
|
var image = new System.Windows.Controls.Image
|
||||||
|
{
|
||||||
|
Source = uri,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
Width = 1920,
|
||||||
|
Height = 1080,
|
||||||
|
};
|
||||||
|
ImageBehavior.SetAnimatedSource(image, uri);
|
||||||
|
ImageBehavior.SetAutoStart(image , true);
|
||||||
|
grid.Children.Add(image);
|
||||||
|
needAnimationGrid.Children.Add(grid);
|
||||||
|
|
||||||
|
|
||||||
|
Debug.WriteLine($"GIF尺寸: {uri.PixelWidth}x{uri.PixelHeight}");
|
||||||
|
Debug.WriteLine($"GIF URI: {uri.UriSource}");
|
||||||
|
// 动画播放完成后移除Grid
|
||||||
|
Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await Task.Delay(3300); // 等待4秒钟,确保动画播放完毕
|
||||||
|
Application.Current.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
needAnimationGrid.Children.Remove(grid);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//预加载资源
|
||||||
|
private static readonly Dictionary<string, BitmapImage> _cache = new Dictionary<string, BitmapImage>();
|
||||||
|
private static bool _isPreloaded = false;
|
||||||
|
|
||||||
|
// 预加载所有需要的 GIF
|
||||||
|
public static void PreloadGifs()
|
||||||
|
{
|
||||||
|
if (_isPreloaded) return;
|
||||||
|
var gifPaths = new[]
|
||||||
|
{
|
||||||
|
"/time_3.gif",
|
||||||
|
// 添加其他需要预加载的 GIF 路径
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var path in gifPaths)
|
||||||
|
{
|
||||||
|
LoadGifToCache(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
_isPreloaded = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void LoadGifToCache(string relativePath)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string projectRoot = Path.Combine(AppContext.BaseDirectory, @"..\..\..");
|
||||||
|
string topPath = Path.Combine(projectRoot, "Resources", "Img", "gif");
|
||||||
|
var bitmapImage = new BitmapImage();
|
||||||
|
bitmapImage.BeginInit();
|
||||||
|
bitmapImage.UriSource = new Uri(topPath + relativePath, UriKind.Relative);
|
||||||
|
bitmapImage.CacheOption = BitmapCacheOption.OnLoad; // 立即加载到内存
|
||||||
|
bitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache; // 忽略磁盘缓存
|
||||||
|
bitmapImage.EndInit();
|
||||||
|
bitmapImage.Freeze(); // 冻结对象,使其线程安全
|
||||||
|
|
||||||
|
|
||||||
|
_cache[relativePath] = bitmapImage;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"预加载GIF失败 {relativePath}: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BitmapImage GetGif(string relativePath)
|
||||||
|
{
|
||||||
|
if (_cache.TryGetValue(relativePath, out var cachedImage))
|
||||||
|
{
|
||||||
|
return cachedImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果缓存中没有,立即加载
|
||||||
|
LoadGifToCache(relativePath);
|
||||||
|
return _cache.GetValueOrDefault(relativePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
Wpf_AiSportsMicrospace/Resources/Img/gif/time_3.gif
Normal file
BIN
Wpf_AiSportsMicrospace/Resources/Img/gif/time_3.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
@ -16,6 +16,7 @@
|
|||||||
VerticalAlignment="Top"
|
VerticalAlignment="Top"
|
||||||
Width="615"
|
Width="615"
|
||||||
Margin="0,50,0,0"
|
Margin="0,50,0,0"
|
||||||
|
MouseDown="Image_MouseDown"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- CoverFlowControl,距离图片80 -->
|
<!-- CoverFlowControl,距离图片80 -->
|
||||||
|
|||||||
@ -36,6 +36,8 @@ namespace Wpf_AiSportsMicrospace
|
|||||||
public partial class Home : UserControl
|
public partial class Home : UserControl
|
||||||
{
|
{
|
||||||
public static Uri loadingImage = new Uri("/Resources/Img/Album/1.gif", UriKind.Relative);
|
public static Uri loadingImage = new Uri("/Resources/Img/Album/1.gif", UriKind.Relative);
|
||||||
|
public static Uri countDownGif = new Uri("/Resources/Img/gif/time_3.gif", UriKind.Relative);
|
||||||
|
|
||||||
private Main _mainWin => Application.Current.MainWindow as Main;
|
private Main _mainWin => Application.Current.MainWindow as Main;
|
||||||
|
|
||||||
public Home()
|
public Home()
|
||||||
@ -61,6 +63,7 @@ namespace Wpf_AiSportsMicrospace
|
|||||||
{
|
{
|
||||||
_mainWin.HumanFrameUpdated += OnHumanFrameUpdated;
|
_mainWin.HumanFrameUpdated += OnHumanFrameUpdated;
|
||||||
_mainWin.WebcamClient.StartExtract();
|
_mainWin.WebcamClient.StartExtract();
|
||||||
|
Utils.PreloadGifs();
|
||||||
}
|
}
|
||||||
private void Home_Unloaded(object sender, RoutedEventArgs e)
|
private void Home_Unloaded(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
@ -163,5 +166,11 @@ namespace Wpf_AiSportsMicrospace
|
|||||||
mainWin?.SwitchPageWithMaskAnimation(newPage, true);
|
mainWin?.SwitchPageWithMaskAnimation(newPage, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Image_MouseDown(object sender, MouseButtonEventArgs e)
|
||||||
|
{
|
||||||
|
var mainWin = Application.Current.MainWindow as Main;
|
||||||
|
mainWin!.ShowCountDownAnimation();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:local="clr-namespace:Wpf_AiSportsMicrospace.MyUserControl"
|
xmlns:local="clr-namespace:Wpf_AiSportsMicrospace.MyUserControl"
|
||||||
|
xmlns:gif="http://wpfanimatedgif.codeplex.com"
|
||||||
mc:Ignorable="d" Height="1080" Width="1920" Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded">
|
mc:Ignorable="d" Height="1080" Width="1920" Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.Background>
|
<Grid.Background>
|
||||||
|
|||||||
@ -220,12 +220,13 @@ namespace Wpf_AiSportsMicrospace.Views
|
|||||||
private DateTime _lastUpdateTime = DateTime.Now;
|
private DateTime _lastUpdateTime = DateTime.Now;
|
||||||
private void StartCountdown(int start = 3)
|
private void StartCountdown(int start = 3)
|
||||||
{
|
{
|
||||||
_currentCountdown = start;
|
_mainWin.ShowCountDownAnimation();
|
||||||
|
//_currentCountdown = start;
|
||||||
|
|
||||||
countdownText.Text = _currentCountdown.ToString();
|
//countdownText.Text = _currentCountdown.ToString();
|
||||||
countdownGrid.Visibility = Visibility.Visible;
|
//countdownGrid.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
_lastUpdateTime = DateTime.Now;
|
//_lastUpdateTime = DateTime.Now;
|
||||||
|
|
||||||
Utils.PlayBackgroundMusic("countdown_3.mp3", false);
|
Utils.PlayBackgroundMusic("countdown_3.mp3", false);
|
||||||
}
|
}
|
||||||
@ -630,24 +631,43 @@ namespace Wpf_AiSportsMicrospace.Views
|
|||||||
grid.Children.Add(scoreText);
|
grid.Children.Add(scoreText);
|
||||||
ScoreGrid.Children.Add(grid);
|
ScoreGrid.Children.Add(grid);
|
||||||
}
|
}
|
||||||
|
showElement("RankingGrid");
|
||||||
|
//var rankingGrid = FindName("RankingGrid") as Grid;
|
||||||
|
//if (rankingGrid == null) return;
|
||||||
|
|
||||||
var rankingGrid = FindName("RankingGrid") as Grid;
|
//rankingGrid.Visibility = Visibility.Visible;
|
||||||
if (rankingGrid == null) return;
|
//var fadeIn = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(600));
|
||||||
|
//rankingGrid.BeginAnimation(UIElement.OpacityProperty, fadeIn);
|
||||||
rankingGrid.Visibility = Visibility.Visible;
|
|
||||||
var fadeIn = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(600));
|
|
||||||
rankingGrid.BeginAnimation(UIElement.OpacityProperty, fadeIn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 控制排行榜隐藏(渐隐动画)
|
/*
|
||||||
public void HideRankingBoard()
|
* 控制元素隐藏(渐隐动画
|
||||||
|
* time: 动画持续时间(毫秒)
|
||||||
|
* name: 元素名称
|
||||||
|
*/
|
||||||
|
public void HideElement(string name , int time)
|
||||||
{
|
{
|
||||||
var rankingGrid = FindName("RankingGrid") as Grid;
|
var Element = FindName(name) as Grid;
|
||||||
if (rankingGrid == null) return;
|
if (Element == null) return;
|
||||||
|
|
||||||
var fadeOut = new DoubleAnimation(1, 0, TimeSpan.FromMilliseconds(600));
|
var fadeOut = new DoubleAnimation(1, 0, TimeSpan.FromMilliseconds(time));
|
||||||
fadeOut.Completed += (s, e) => rankingGrid.Visibility = Visibility.Collapsed;
|
fadeOut.Completed += (s, e) => Element.Visibility = Visibility.Collapsed;
|
||||||
rankingGrid.BeginAnimation(UIElement.OpacityProperty, fadeOut);
|
Element.BeginAnimation(UIElement.OpacityProperty, fadeOut);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 控制元素限时(渐隐动画
|
||||||
|
* time: 动画持续时间(毫秒)
|
||||||
|
* name: 元素名称
|
||||||
|
*/
|
||||||
|
public void showElement(string name, int time = 600 )
|
||||||
|
{
|
||||||
|
var Element = FindName(name) as FrameworkElement;
|
||||||
|
if (Element == null) return;
|
||||||
|
|
||||||
|
Element.Visibility = Visibility.Visible;
|
||||||
|
var fadeIn = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(time));
|
||||||
|
Element.BeginAnimation(UIElement.OpacityProperty, fadeIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,9 +4,24 @@
|
|||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:local="clr-namespace:Wpf_AiSportsMicrospace.Views"
|
xmlns:local="clr-namespace:Wpf_AiSportsMicrospace.Views"
|
||||||
|
xmlns:gif="http://wpfanimatedgif.codeplex.com"
|
||||||
mc:Ignorable="d" WindowState="Maximized">
|
mc:Ignorable="d" WindowState="Maximized">
|
||||||
<Grid>
|
<Grid>
|
||||||
<!-- 过渡容器 -->
|
<!-- 过渡容器 -->
|
||||||
<ContentControl x:Name="MainContent"/>
|
<ContentControl x:Name="MainContent"/>
|
||||||
|
<!--倒计时-->
|
||||||
|
<Grid Height="1080" Width="1920" Visibility="Hidden" x:Name="CountTimeGrid" >
|
||||||
|
<Border Background="#000" Opacity="0.3" />
|
||||||
|
<Image
|
||||||
|
gif:ImageBehavior.AnimatedSource="/Resources/Img/gif/time_3.gif"
|
||||||
|
gif:ImageBehavior.RepeatBehavior="1x"
|
||||||
|
gif:ImageBehavior.AutoStart="False"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Top"
|
||||||
|
Margin="0,0,0,0"
|
||||||
|
x:Name="time3"
|
||||||
|
Visibility="Hidden"
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
@ -14,6 +14,7 @@ using System.Windows.Media.Animation;
|
|||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
using System.Windows.Media.Media3D;
|
using System.Windows.Media.Media3D;
|
||||||
using Wpf_AiSportsMicrospace.Common;
|
using Wpf_AiSportsMicrospace.Common;
|
||||||
|
using WpfAnimatedGif;
|
||||||
using Yztob.AiSports.Inferences.Abstractions;
|
using Yztob.AiSports.Inferences.Abstractions;
|
||||||
using Yztob.AiSports.Inferences.Things;
|
using Yztob.AiSports.Inferences.Things;
|
||||||
using Yztob.AiSports.Sensors.Abstractions;
|
using Yztob.AiSports.Sensors.Abstractions;
|
||||||
@ -64,6 +65,8 @@ namespace Wpf_AiSportsMicrospace.Views
|
|||||||
//StartHeartbeatMonitor();
|
//StartHeartbeatMonitor();
|
||||||
// 默认显示首页
|
// 默认显示首页
|
||||||
MainContent.Content = new Home();
|
MainContent.Content = new Home();
|
||||||
|
|
||||||
|
ImageBehavior.AddAnimationCompletedHandler(time3, TimeDown);
|
||||||
}
|
}
|
||||||
private void StartFrameProcessing()
|
private void StartFrameProcessing()
|
||||||
{
|
{
|
||||||
@ -347,5 +350,36 @@ namespace Wpf_AiSportsMicrospace.Views
|
|||||||
maskTop.RenderTransform.BeginAnimation(TranslateTransform.YProperty, topInAnim);
|
maskTop.RenderTransform.BeginAnimation(TranslateTransform.YProperty, topInAnim);
|
||||||
maskBottom.RenderTransform.BeginAnimation(TranslateTransform.YProperty, bottomInAnim);
|
maskBottom.RenderTransform.BeginAnimation(TranslateTransform.YProperty, bottomInAnim);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ShowElement(string name, int time = 600)
|
||||||
|
{
|
||||||
|
var Element = FindName(name) as FrameworkElement;
|
||||||
|
if (Element == null) return;
|
||||||
|
|
||||||
|
Element.Visibility = Visibility.Visible;
|
||||||
|
var fadeIn = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(time));
|
||||||
|
Element.BeginAnimation(UIElement.OpacityProperty, fadeIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
int num = 1;
|
||||||
|
public void ShowCountDownAnimation()
|
||||||
|
{
|
||||||
|
ImageBehavior.SetRepeatBehavior(time3, new RepeatBehavior(2));
|
||||||
|
ImageBehavior.SetRepeatBehavior(time3, new RepeatBehavior(1));
|
||||||
|
CountTimeGrid.Visibility = Visibility.Visible;
|
||||||
|
time3.Visibility = Visibility.Visible;
|
||||||
|
ImageBehavior.GetAnimationController(time3).Play();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TimeDown(object? sender, RoutedEventArgs? e)
|
||||||
|
{
|
||||||
|
//MessageBox.Show("播放完啦");// 弹提示框
|
||||||
|
ImageBehavior.GetAnimationController(time3).Pause();
|
||||||
|
CountTimeGrid.Visibility = Visibility.Hidden;
|
||||||
|
time3.Visibility = Visibility.Hidden;
|
||||||
|
num++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -40,6 +40,7 @@
|
|||||||
<None Remove="Resources\Img\gif\2.gif" />
|
<None Remove="Resources\Img\gif\2.gif" />
|
||||||
<None Remove="Resources\Img\gif\3.gif" />
|
<None Remove="Resources\Img\gif\3.gif" />
|
||||||
<None Remove="Resources\Img\gif\bottom_animation_image.png" />
|
<None Remove="Resources\Img\gif\bottom_animation_image.png" />
|
||||||
|
<None Remove="Resources\Img\gif\time_3.gif" />
|
||||||
<None Remove="Resources\Img\gif\top_animation_image.png" />
|
<None Remove="Resources\Img\gif\top_animation_image.png" />
|
||||||
<None Remove="Resources\Img\play_img\play_home_bg.png" />
|
<None Remove="Resources\Img\play_img\play_home_bg.png" />
|
||||||
<None Remove="Resources\Img\play_img\play_home_title.png" />
|
<None Remove="Resources\Img\play_img\play_home_title.png" />
|
||||||
@ -208,6 +209,9 @@
|
|||||||
<Resource Include="Resources\Img\gif\bottom_animation_image.png">
|
<Resource Include="Resources\Img\gif\bottom_animation_image.png">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Resource>
|
</Resource>
|
||||||
|
<Resource Include="Resources\Img\gif\time_3.gif">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</Resource>
|
||||||
<Resource Include="Resources\Img\gif\top_animation_image.png">
|
<Resource Include="Resources\Img\gif\top_animation_image.png">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</Resource>
|
</Resource>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user