上一篇博客使用了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().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

uwp 图片切换动画 使用帧动画的更多相关文章

  1. 3d图片切换(css3帧动画)

    效果带抖动翻转隐藏,使用帧动画 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  2. [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络)

    [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络) 地址: http://www.eoeandroid.com/thread-918356-1-1.html h ...

  3. Android动画(一)-视图动画与帧动画

    项目中好久没用过动画了,所以关于动画的知识都忘光了.知识总是不用则忘.正好最近的版本要添加比较炫酷的动画效果,所以也借着这个机会,写博客来整理和总结关于动画的一些知识.也方便自己今后的查阅. Andr ...

  4. Android开发——View动画、帧动画和属性动画详解

    0. 前言   Android动画是面试的时候经常被问到的话题.我们都知道Android动画分为三类:View动画.帧动画和属性动画. 先对这三种动画做一个概述: View动画是一种渐进式动画,通过图 ...

  5. uwp 图片切换动画

    最近在学习安卓,LOL自定义战绩项目近乎停工,而且腾旭把界面全改了,好烦.刚好学习到安卓中的图片切换动画,我就想在LOL项目中实现一个.首先上百度查看一下,妈的,资料少的可怜. 还是自己来吧.自定义控 ...

  6. app引导页(背景图片切换加各个页面动画效果)

    前言:不知不觉中又加班到了10点半,整个启动页面做了一天多的时间,一共有三个页面,每个页面都有动画效果,动画效果调试起来麻烦,既要跟ios统一,又要匹配各种不同的手机,然后产品经理还有可能在中途改需求 ...

  7. android 学习随笔二十四(动画:帧动画)

    帧动画,一张张图片不断的切换,形成动画效果 * 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 * FrameAnimatio ...

  8. CSS动画-step()帧动画

    Twitter使用了一种新的动画形式,使用一系列的图片来创建帧动画. 下面是一个❤动画,鼠标移动到上面开始绽放. .heart { width: 100px; height: 100px; backg ...

  9. 过渡与动画 - 逐帧动画&steps调速函数

    写在前面 上一篇中我们熟悉五种内置的缓动曲线和(三次)贝塞尔曲线,并且基于此完成了缓动效果. 但是如果我们想要实现逐帧动画,基于贝塞尔曲线的调速函数就显得有些无能为力了,因为我们并不需要帧与帧之间的过 ...

随机推荐

  1. 【算法杂谈】Miller-Rabin素性测试算法

    额,我们今天来讲一讲Miller-Rabin素性测试算法. 读者:怎么又是随机算法!!!(⊙o⊙)… [好了,言归正传] [费马小定理] 费马小定理只是个必要条件,符合费马小定理而非素数的数叫做Car ...

  2. [转]svn 回退/更新/取消至某个版本命令详解

    1. 取消Add/Delete 取消文件 svn revert 文件名 取消目录 svn revert --depth=infinity 目录名 2. 回退版本 方法1: 用svn merge 1) ...

  3. 关于2016.12.12——T1的反思:凸包的意义与应用

    2016.12.12 T1 给n个圆,保证圆圆相离,求将圆围起来的最小周长.n<=100 就像上图.考场上,我就想用切线的角度来做凸包.以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度 ...

  4. PHP用户注册与登录完整代码【4】

    login.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  5. HDU 2509 Nim博弈变形

    1.HDU 2509  2.题意:n堆苹果,两个人轮流,每次从一堆中取连续的多个,至少取一个,最后取光者败. 3.总结:Nim博弈的变形,还是不知道怎么分析,,,,看了大牛的博客. 传送门 首先给出结 ...

  6. python小程序

    使用python实现在crt中捕捉出现的异常信息,并统计出现的次数: #$language = "Python" #$interface = "1.0" def ...

  7. I/O Techie 社区 --欢迎您的加入

    I/O Techie 社区 上线了,希望能聚集更多的软件开发者,提供给处于各个阶段的新鸟,老鸟更多的帮助和更好的服务. 链接:http://www.iotechie.info/ Google +:ht ...

  8. 代码-->发呆

    代码,敲着敲着,就发呆了. 其实安安静静敲代码,是一种享受.开着不快不慢的音乐,徜徉在代码的世界里,忘记了时间的存在. 原本备忘录中提醒我13点看书,一小时又一小时的延后,已经不记得自己按了多少次一小 ...

  9. Python之路第一课Day5--随堂笔记(模块)

    本节课程大纲: 1.模块介绍 2.time &datetime模块 3.random 4.os 5.sys 6.shutil 7.json & picle 8.shelve 9.xml ...

  10. Mysql的用户名密码设置方法

    方法如下: 1, 关闭mysql服务 /etc/init.d/mysqld stop 2,使用 –skip-grant-tables选项启动mysql服务,可以修 改/etc/inin.d/mysql ...