DoubleAnimation 创建动画问题

adonis_net 2011-05-11 03:21:53
步骤1:创建一个Rectangle.
代码:
//初始化bullet
private void bulletInit(string bulletType)
{

rect = new Rectangle();
var imageBrush = new ImageBrush();
imageBrush.Stretch = Stretch.None;
imageBrush.AlignmentX = AlignmentX.Left;
imageBrush.AlignmentY = AlignmentY.Top;
switch (bulletType)
{
case "green":
imageBrush.ImageSource = new BitmapImage(new Uri("/SLADdemo;component/" + bullet[0], UriKind.Relative));
break;
case "ice":
imageBrush.ImageSource = new BitmapImage(new Uri("/SLADdemo;component/" + bullet[1], UriKind.Relative));
break;
case "fire":
imageBrush.ImageSource = new BitmapImage(new Uri("/SLADdemo;component/" + bullet[2], UriKind.Relative));
break;
}

rect.Fill = imageBrush;
rect.Width = 47;
rect.Height = 47;
LayoutRoot.Children.Add(rect);
Canvas.SetLeft(rect, 150);
Canvas.SetTop(rect, 118);
rect.Visibility = System.Windows.Visibility.Collapsed;

}

步骤2:给矩形创建动画
代码:

//显示
rect.Visibility = System.Windows.Visibility.Visible;

//新建动画
storyboard = new Storyboard();




//创建X轴方向动画

DoubleAnimation da = new DoubleAnimation();


Duration dur = new Duration(TimeSpan.FromMilliseconds(1000));

da.Duration = dur;
da.From = Canvas.GetLeft(rect);
da.To = 800;

Storyboard.SetTarget(da, rect);

Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Left)"));

storyboard.Children.Add(da);


//将动画动态加载进资源内

if (!Resources.Contains("rectAnimation"))
{

Resources.Add("rectAnimation", storyboard);


}

//动画播放

storyboard.Begin();


bulletInit("ice");



问题:动画能正常运行,但是运行过程中图像回时不时往回弹,不是很平滑,请问这是什么原因?
...全文
133 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Storyboard.SetTarget(da, rect);

Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Left)"));
你这样设置了,动画可以运行,那你这个rect图像肯定也会随动画而播放啊!
资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在本文中,我们将详细探讨如何在 WPF(Windows Presentation Foundation)应用程序中实现加载等待动画,也就是常见的“Loading”效果。WPF 是 .NET 框架的一部分,为开发富客户端应用提供了强大的图形用户界面(GUI)支持。接下来,我们将逐步解析如何实现这种“WPF 加载等待动画(Loading)”。 加载等待动画通常是通过动态改变界面元素的位置或状态来实现的。在本示例中,我们将在 Canvas 控件中放置 9 个 Ellipse(圆形)元素,并通过定时器不断调整这些圆的位置,从而模拟出“Loading”动画的循环流动感。 Canvas 控件:Canvas 是 WPF 中的一个布局控件,允许在二维空间中绝对定位子元素。我们可以通过设置每个 Ellipse 的坐标,使其在 Canvas 上按预期位置显示。 Ellipse 元素:Ellipse 是 WPF 中用于绘制圆形或椭圆形的基本形状控件。我们可以通过设置其 Width 和 Height 属性来定义大小,通过 Fill 属性设置填充颜色,通过 Stroke 和 StrokeThickness 属性定义边框。 动画原理:为了实现动画效果,我们需要一个定时器,例如 System.Windows.Threading.DispatcherTimer。每当定时器触发时,更新每个 Ellipse 的位置。我们可以通过 Storyboard 和 DoubleAnimation 创建动画,或者直接在定时器事件处理程序中更改位置。 DoubleAnimation:这是 WPF 中的一种动画类型,用于改变双精度浮点数值。例如,可以通过 DoubleAnimation 改变 Ellipse 的 Margin 属性,使其

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧