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

原文: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

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

欢迎交流[email protected]

原文地址:https://www.cnblogs.com/lonelyxmas/p/9094747.html

时间: 2024-08-24 13:38:21

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

uwp 图片切换动画

最近在学习安卓,LOL自定义战绩项目近乎停工,而且腾旭把界面全改了,好烦.刚好学习到安卓中的图片切换动画,我就想在LOL项目中实现一个.首先上百度查看一下,妈的,资料少的可怜. 还是自己来吧.自定义控件走一波 效果图 新建自定义控件 直接改模板文件 把里面换成一个image source绑定到依赖属性上 <Style TargetType="control:ImageDisplayer"> <Setter Property="Template"&g

将gif图片解析为cocos2d-x帧动画

因为游戏项目需要能够直接播放gif格式的图片,但是cocos2d-x本身并没有提供这方面的功能.在网上查阅发现已经有人给出了一种实现,但是并不能够完全满足我的需求.而且存在一些问题,如不能跨平台,频繁加载时导致内存用尽.后来参考其源码作出了一些修改,使gif图片转换为帧动画方便我使用. 现在已经优化了内存分配问题并且支持跨平台了,支持cocos2d-x3.0以上版本. 下面是使用例子: // 动画定义 GifAnimationDef def; def.loops = -1; // 循环次数 de

Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)

就好像演电影一样,播放实现准备好的图片,来实现动画效果. 逐帧动画需要用到AnimationDrawable类,该类主要用于创建一个逐帧动画,然后我们把这个动画设置为view的背景即可. android提供两种方法为AnimationDrawable添加帧:XML定义和JAVA代码创建. XML 因为动画帧的资源需要是一个Drawable对象,所以需要把它放到Drawable目录下.在<animation-list>使用<item>来添加一帧 anima.xml <?xml

视图动画和帧动画

转载请注明出处:http://blog.csdn.net/ZhouLi_CSDN/article/details/45971421 View Animaiton 通常使用xml文件定义动画,这样易读,重用. xml写在res/anim/路径下. 下面是例子: <set android:shareInterpolator="false"> <scale android:interpolator="@android:anim/accelerate_deceler

WPF(Windows10通用应用程序开发) 线性插值动画 or 帧动画学习笔记及实例

线性插值动画: [Storyboard]基本属性: TargetProperty:目标属性 TargetName:目标名称 From:指向属性的初始值:(可省略) To/By:(二选一) To:指向属性动画完成后的值:(可省略) By:指向属性初始值增加的值:(可省略) Duration:动画执行时间:格式:hh:mm:ss(如:0:0:1表示动画执行1s) AutoReverse:时间线(动画)达到Duration终点时是否倒退(true/false) RepeatBehavior:表示时间线

android104 帧动画,补间动画,属性动画

##帧动画FrameAnimation* 多张图片快速切换,形成动画效果* 帧动画使用xml定义 package com.itheima.frameanimation; import android.os.Bundle; import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.view.Menu; import android.widget.ImageView;

Android游戏开发研究帧动画实现

 1.动画的原则框架        帧的动画帧的动画顾名思义,画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只是是N张图片在一帧一帧的切换罢了.对摄像头不清楚的请看p=992" rel="bookmark">Android研究之游戏开发摄像头更新        如图所看到的:人物行走动画的实现方式, 4帧行走动画在播放区域 一帧一帧向左切换播放 给人们一种播放动画的假象 .图片就动

Android游戏开发之游戏帧动画的播放与处理

带你走进游戏开发的世界之游戏帧动画的处理<ignore_js_op> 1.帧动画的原理 帧动画帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一帧的切换罢了.            如图所示:人物行走动画的实现方式, 4帧行走动画在播放区域 一帧一帧向左切换播放 给人们一种播放动画的假象 ,图片就动了起来, 很简单吧,其它三方向播放动画的方法类似我就不再一一举例

Android(java)学习笔记198:Android下的帧动画(Drawable Animation)

1.帧动画: 帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一帧的切换罢了. 2.Android如何实现播放帧动画如下: (1)首先我在网上下载了一张gif动态图片,如下: 这是一个gif动态图片,其实它是很多静态图片相同区域快速切换,我们怎么样把这个gif动态图片中的静态图片从中抽离出来? 这里我使用了一个小工具gifsplitter(大家可以百度在网上自行下