1. 程式人生 > >WPF 序列幀動畫

WPF 序列幀動畫

直接上程式碼

private void LoadPics()
        {
            try
            {
                _storyboard = new Storyboard();
                for (int i = 0; i < 60; i++)
                {
                    ObjectAnimationUsingKeyFrames oauf = new ObjectAnimationUsingKeyFrames();
                    //ObjectAnimationUsingKeyFrames 可以對指定 Duration 內的一組 KeyFrames 中的 Object 屬性值進行動畫處理
                    BitmapImage bitmap = new BitmapImage();
                    bitmap.BeginInit();
                    bitmap.UriSource = new Uri("pack://application:,,,/jg.CloudCube.WPF;component/Resources/LoadingAnimation/loading" + (i + 1) + ".png");
                    bitmap.CacheOption = BitmapCacheOption.Default;
                    bitmap.EndInit();

                    ImageBrush imgBrush = new ImageBrush(bitmap);
                    //讀取圖片檔案
                    DiscreteObjectKeyFrame dokf = new DiscreteObjectKeyFrame();
                    //DiscreteObjectKeyFrame 通過使用離散內插,可以在前一個關鍵幀的 Object 值及其自己的 Value 之間進行動畫處理。
                    dokf.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(i * 30));
                    //KeyTime 獲取或設定應到達關鍵幀的目標 Value 的時間
                    //這裡每隔40毫秒設定一張圖片,也就是每秒1000/40=25幀
                    dokf.Value = imgBrush;
                    oauf.KeyFrames.Add(dokf);
                    Storyboard.SetTargetProperty(oauf, new PropertyPath("(Rectangle.Fill)"));
                    //把動畫應用到窗體的Rectangle中
                    Storyboard.SetTarget(oauf, RectDis);
                    //RectDis是Rectangle的名稱
                    _storyboard.Children.Add(oauf);
                    //把ObjectAnimationUsingKeyFrames動畫新增到Storyboard中
                }
                _storyboard.RepeatBehavior = RepeatBehavior.Forever;
            }
            catch (Exception ex)
            {
                var log = log4net.LogManager.GetLogger("Error");
                log.Error(ex.Message, ex);
            }
        }
 <Grid>
        <Rectangle Name="RectDis"/>
    </Grid>

播放動畫時,使用Storyboard.Begin()方法就可以了。