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().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 图片切换动画 使用帧动画的更多相关文章
- 3d图片切换(css3帧动画)
效果带抖动翻转隐藏,使用帧动画 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络)
[Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络) 地址: http://www.eoeandroid.com/thread-918356-1-1.html h ...
- Android动画(一)-视图动画与帧动画
项目中好久没用过动画了,所以关于动画的知识都忘光了.知识总是不用则忘.正好最近的版本要添加比较炫酷的动画效果,所以也借着这个机会,写博客来整理和总结关于动画的一些知识.也方便自己今后的查阅. Andr ...
- Android开发——View动画、帧动画和属性动画详解
0. 前言 Android动画是面试的时候经常被问到的话题.我们都知道Android动画分为三类:View动画.帧动画和属性动画. 先对这三种动画做一个概述: View动画是一种渐进式动画,通过图 ...
- uwp 图片切换动画
最近在学习安卓,LOL自定义战绩项目近乎停工,而且腾旭把界面全改了,好烦.刚好学习到安卓中的图片切换动画,我就想在LOL项目中实现一个.首先上百度查看一下,妈的,资料少的可怜. 还是自己来吧.自定义控 ...
- app引导页(背景图片切换加各个页面动画效果)
前言:不知不觉中又加班到了10点半,整个启动页面做了一天多的时间,一共有三个页面,每个页面都有动画效果,动画效果调试起来麻烦,既要跟ios统一,又要匹配各种不同的手机,然后产品经理还有可能在中途改需求 ...
- android 学习随笔二十四(动画:帧动画)
帧动画,一张张图片不断的切换,形成动画效果 * 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 * FrameAnimatio ...
- CSS动画-step()帧动画
Twitter使用了一种新的动画形式,使用一系列的图片来创建帧动画. 下面是一个❤动画,鼠标移动到上面开始绽放. .heart { width: 100px; height: 100px; backg ...
- 过渡与动画 - 逐帧动画&steps调速函数
写在前面 上一篇中我们熟悉五种内置的缓动曲线和(三次)贝塞尔曲线,并且基于此完成了缓动效果. 但是如果我们想要实现逐帧动画,基于贝塞尔曲线的调速函数就显得有些无能为力了,因为我们并不需要帧与帧之间的过 ...
随机推荐
- Ubuntu14.04下安装docker
http://www.cnblogs.com/xiaoluosun/p/5520510.html
- Chrome一直提示“adobe flash player 因过期而遭阻止” ,如何解决?
完全不用安装最新版的 Chrome,只需要将 Flash 组件安装一下最新版即可. 并且这里需要的不是网上随处可见的 NPAPI 版本,而是冷门的 PPAPI 版本. 请收藏好这个链接,是某位大牛从 ...
- NotificationCenter接收不到通知的原因
今天在项目中遇到一个奇葩的事情,我在一个类中明明写了: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #00af ...
- docker-compose启动报错,解决方案
[root@cache1 www]# docker-composeTraceback (most recent call last): File "/usr/bin/docker-compo ...
- java分享第二十天(build.xml的语法及写法)
通常情况下,Ant构建文件build.xml应该在项目的基础目录.可以自由使用其他文件名或将构建文件中其他位置.在本练习中,创建一个名为build.xml 在电脑的任何地方的文件. <?xml ...
- div样式text-align在子元素缩进不规范的情况下,chrome出现的问题(貌似结果是inline-block导致的)
在调css的时候,发现居然有firefox实现效果完整而chrome出现问题的情况: 详细情况:segmentfault1 segmentfault2 全文表达: <html><he ...
- 线程处理模型 由于 SynchronizationContext 引起的死锁问题解决
由于GUI 应用程序 不能使用线程池的线程更新UI,只能使用 GUI 线程更新,所以在 await 前后需要保证是同一个 GUI 线程 ASP.NET 程序 的线程处理客户端请求的时候,需要假定客户端 ...
- java并发编程(十八)阻塞队列和阻塞栈
阻塞队列 阻塞队列是Java 5并发新特性中的内容,阻塞队列的接口是java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue.Dela ...
- nodejs学习之events
在node里许多对象都发出事件:一个net.Server对象每次一个连接到来,都发出一个事件,一个fs.readStream对象在文件打开时放出一个事件.所有能放出事件的对象都是event.Event ...
- HTML基础篇之知识点补充和拓展
<tbody>标签 <tbody>如果表格内容非常多的时候,如果加上这个标签它会让这个表格全部下载好才会显示.用在表格标签上面. 如果您使用 thead.tfoot 以及 tb ...