uwp 图片切换动画 使用帧动画

简介: 原文:uwp 图片切换动画 使用帧动画上一篇博客使用了Timer来实现图片的切换,@lindexi_gd讨论了一下性能,我本人其实对性能这一方面不太熟,但我觉得还是有必要考虑一下,那么今天我们使用帧动画开实现以下 新建项目,添加一个Button和Image 在Page里定义资源 ...
原文: uwp 图片切换动画 使用帧动画

上一篇博客使用了Timer来实现图片的切换,@lindexi_gd讨论了一下性能,我本人其实对性能这一方面不太熟,但我觉得还是有必要考虑一下,那么今天我们使用帧动画开实现以下

新建项目,添加一个Button和Image

在Page里定义资源

 <Storyboard x:Key="std" x:Name="std" RepeatBehavior="Forever" AutoReverse="True">
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="image" Storyboard.TargetProperty="Source">
                <DiscreteObjectKeyFrame KeyTime="0:0:0.1" Value="Resources/teemo_1.png" />
                <DiscreteObjectKeyFrame KeyTime="0:0:0.2" Value="Resources/teemo_2.png"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.3" Value="Resources/teemo_3.png"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.4" Value="Resources/teemo_4.png"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="Resources/teemo_5.png"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.6" Value="Resources/teemo_6.png"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.7" Value="Resources/teemo_7.png"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.8" Value="Resources/teemo_8.png"/>
                                                                 
            </ObjectAnimationUsingKeyFrames>
            
        </Storyboard>

然后给Button添加点击事件

处理点击事件 播放动画

private void Button_Click(object sender, RoutedEventArgs e)
        {
            //
            std.Begin();
        }

然后看看帧率

如果我们用Task去卡住UI线程的话,动画就会停止

private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Task.Delay(1000).Wait();
        }

这样我们可知帧动画其实是运行在UI线程上的

然后我有新建了另一个故事板

直接把每个帧的的Value属性变为BitmapImage对象

        <BitmapImage x:Key="key1" UriSource="Resources/teemo_1.png"/>
        <BitmapImage x:Key="key2" UriSource="Resources/teemo_2.png"/>
        <BitmapImage x:Key="key3" UriSource="Resources/teemo_3.png"/>
        <BitmapImage x:Key="key4" UriSource="Resources/teemo_4.png"/>
        <BitmapImage x:Key="key5" UriSource="Resources/teemo_5.png"/>
        <BitmapImage x:Key="key6" UriSource="Resources/teemo_6.png"/>
        <BitmapImage x:Key="key7" UriSource="Resources/teemo_7.png"/>
        <BitmapImage x:Key="key8" UriSource="Resources/teemo_8.png"/>
        <Storyboard x:Key="std2" x:Name="std2" RepeatBehavior="Forever" AutoReverse="True">
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="image2" Storyboard.TargetProperty="Source">
                <DiscreteObjectKeyFrame KeyTime="0:0:0.0" Value="{StaticResource key1}" />
                <DiscreteObjectKeyFrame KeyTime="0:0:0.1" Value="{StaticResource key2}"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.2" Value="{StaticResource key3}"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.3" Value="{StaticResource key4}"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.4" Value="{StaticResource key5}"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="{StaticResource key6}"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.6" Value="{StaticResource key7}"/>
                <DiscreteObjectKeyFrame KeyTime="0:0:0.7" Value="{StaticResource key8}"/>
            </ObjectAnimationUsingKeyFrames>

        </Storyboard>

点击按钮开始故事板

 

 private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            std2.Begin();
        }

再来看看效果

同样,如果卡住UI的话,动画肯定是不会运行的 

那么我们再来看看用Timer实现的帧率

从帧率上来看,第一种方式很明显帧率高很多,稳定在60左右,第二种和Timer实现的一样,帧率在9左右,我看不懂这个,但第一种方式的实现总给我一种图片在闪的感觉,期望有大手子指点一下。

@lindexi_gd

gayhub地址:https://github.com/hei12138/LOLSecond

新手,写的不好的地方请多指教

欢迎交流1329698854@qq.com

目录
相关文章
|
7月前
Winform使用PictureBox控件显示图片并且自适应
Winform使用PictureBox控件显示图片并且自适应
513 0
|
JSON Android开发 数据格式
原生app开发技巧——底部导航栏动画效果按钮制作方法之采用photoshop制作gif动画-过渡动画关键帧
原生app开发技巧——底部导航栏动画效果按钮制作方法之采用photoshop制作gif动画-过渡动画关键帧
原生app开发技巧——底部导航栏动画效果按钮制作方法之采用photoshop制作gif动画-过渡动画关键帧
|
图形学
unity动画之帧动画使用
使用unity实现lol寒冰帧动画
unity动画之帧动画使用
实现场景切换的时候淡入淡出的效果(Unity3D)
在游戏中不可避免的要进行场景切换,如果切换的场景要加载的资源太多太大,那么就要耗时很长时间,这对于用户的体验来说很不舒服,也就是常说的游戏卡了。怎么解决这种尴尬呢。比较推荐的就是异步加载场景,然后中间加一个过渡场景,过渡场景做的美观一些,然后加一个进度条,看起来就不会那么尴尬了。然后在场景过渡的时候,加一个淡入淡出的效果,就很nice了今天就实现一个场景切换的时候淡入淡出的效果。剩下的场景异步加载还有中间过渡场景有时间再写。
Qt 使用一张图片实现转圈的动画效果
这个是显示的效果,以前用的时候就是网上照一张Gif动画,完了加载进去。我们可以在Qt中使用Movie来操纵Gif动画。 这个试下方式就是通过painter绘制一个图片,通过按照一定的规律旋转图片实现的。
849 0
Qt 使用一张图片实现转圈的动画效果
|
开发工具
MFC窗口特效之动画效果(一) .
最近在学习MFC的过程中,看到一个窗口动画特效例子,不过它是在一个对话框里面嵌入效果,我想如果能把它的代码提取出来再写成一个窗口动画类就好了。于是便着手写了这个类,你可以去CSND下载这个代码运行看看。
1319 0
MFC窗口特效之动画效果(一) .
uwp - 获取当前屏幕宽高/应用宽高
原文:uwp - 获取当前屏幕宽高/应用宽高    public static Size GetScreen() { var applicationView = ApplicationView.
1103 0
|
前端开发 C# Windows
WPF之鼠标滑动切换图片
原文:WPF之鼠标滑动切换图片   在网上找了一会儿也没找到我想要的效果,还是自己动手,丰衣足食吧。   需求:当前面板中只显示一张图片,图片栏的下部有用来显示当前图片处于图片队列中的位置的圆球,并且点击下部栏内的圆球可以快速切换,附动画缓动效果。
1238 0
|
C# 前端开发
WPF 一个弧形手势提示动画
原文:WPF 一个弧形手势提示动画 这是一个操作提示动画,一个小手在屏幕上按照一个弧形来回运动 ...
726 0
|
C#
WPF无边框拖动、全屏、缩放
原文:WPF无边框拖动、全屏、缩放 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/lwwl12/article/details/78059361 先看效果 无边框 设置WindowStyle=”None”,窗口无关闭及缩放按钮,但还有黑边;设置AllowsTransparency=”True”,黑边没有了。
2124 0