WPF 序列幀動畫
阿新 • • 發佈:2018-12-07
直接上程式碼
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()方法就可以了。