zoukankan      html  css  js  c++  java
  • WPF -- 构建动画

    写在前面:本文代码摘自《Head First C#》

    本文使用ObjectAnimationUsingKeyFrames + Storyboard构建一个动画。

    ObjectAnimationUsingKeyFrames为关键帧动画,它允许为动画设置几个关键帧,其中每一帧为ObjectKeyFrame类型。ObjectKeyFrame为抽象类,实际使用的是DiscreteObjectKeyFrame,它是ObjectKeyFrame的派生类,表示目标是不连续变化的。ObjectAnimationUsingKeyFrames的KeyFrames属性即为关键帧集合。DiscreteObjectKeyFrame的Value属性为该帧的值,KeyTime属性为该帧的时间点信息。

    Storyboard可执行一组动画,下面的示例代码只包含一个动画。其SetTarget方法指定执行动画的界面元素,SetTargetProperty方法指定该动画应用到该界面元素的哪个属性上。定义并设置好动画后,将动画添加到Storyboard的Children中。

    RepeatBehavior属性表示动画的重复行为。取值为0代表不播放,取其它double值控制循环次数,取RepeatBehavior.Forever表示一直循环。AutoReverse属性表示是否以相反的动画方式从终止值返回起始值。

    // 前台,UserControl标记的代码
    <Grid>
        <Image x:Name="iamge" Streach="Fill" />
    </Grid>
    
    // 后台代码
    public sealed partial class AnimatedImage:UserControl
    {
        // 使用xaml创建控件,必须有一个无参构造函数
        public AnimatedImage()
        {
            this.InitializeComponent();
        }
    
        publi AnimatedImage(IEnumerable<string> imageNames, TimeSpan interval)
            :this()
        {
            StartAnimation(imageNames, interval);
        }
    
        public void StartAnimation(IEnumerable<string> imageNames, 
            TimeSpan interval)
        {
            Storyboard storyboard = new Storyboard();
            ObjectAnimationUsingKeyFrames animation = 
                new ObjectAnimationUsingKeyFrames();
            storyboard.SetTarget(animation, image);
            storyboard.SetTargetProperty(animation, "Source");
    
            TimeSpan currentInterval = TimeSpan.FromMilliseconds(0);
            foreach(string imageName in imageNames)
            {
                ObjectKeyFrame keyFrame = new DiscreteObjectKeyFrame();
                keyFrame.Value = CreateImageFromAssets(imageName);
                keyFrame.KeyTime = currentInterval;
                animation.KeyFrames.Add(keyFrame);
                currentInterval = currentInterval.Add(interval);
            }
    
            storyboard.RepeatBehavior = RepeatBehavior.Forever;
            storyboard.AutoReverse = true;
            storyboard.Children.Add(animation);
            storyboard.Begin();
        }
    
        private static BitmapImage CreateImageFromAssets(string imageFilename)
        {
            return new BitmapImage(new Uri("ms=appx:///Assets/" + imageFilename));
        }
    }
    
    转载请注明出处,欢迎交流。
  • 相关阅读:
    Python分析44130条用户观影数据,挖掘用户与电影之间的隐藏信息!
    办公利器!用Python快速将任意文件转为PDF
    教你用python搭建一个「生活常识解答」机器人
    办公利器!用Python批量识别发票并录入到Excel表格
    遇到禁止复制该怎么办?幸好我会Python...
    通知:生物信息学云论坛第十五场报告会
    centos7设置SSH安全策略–指定IP登陆
    SpringMVC—RequestMapping注解参数说明
    SpringMVC-方法四种类型返回值总结,你用过几种?
    Window下:自带python编辑器的wxpython项目发布打包exe
  • 原文地址:https://www.cnblogs.com/louzixl/p/14224616.html
Copyright © 2011-2022 走看看