我使用以下代码在画布中间中有一个椭圆形:
<select>
我想为椭圆制作动画,使其从左向后回到中心(从中点开始)。
我将坐标var FixedCircle = new Ellipse
{
Width = 25,
Height = 25,
Stroke = color,
Fill = color,
StrokeThickness = 3
};
var centerX = ActualWidth / 2;
var centerY = ActualHeight / 2;
FixedCircle.Margin = new Thickness(centerX, centerY, 1, 1);
Children.Add(FixedCircle);
InvalidateVisual();
和(centerX,centerY)
设置为起点和终点,同时我也在使用线
(0,centerY)
表示必须将transform设置为pointg,我尝试删除它,但是运动变得更糟,从botton开始,或者坐标Point oldPoint = FixedCircle.TransformToAncestor(this).Transform(new Point(centerX,centerY));
Point newPoint = FixedCircle.TransformToAncestor(this).Transform(new Point(0,centerY));
被视为中间位置,而不是(0,0)
我不要。
(ActualWidth / 2, ActualHeight / 2)
我得到的效果是椭圆正确地从中间偏左
然后出现我的问题,问题从中间开始,然后向右,当我需要椭圆从从左到中间时,不是从右到右:
我想念什么?
答案 0 :(得分:1)
以下代码从中间到左和向后运行重复的动画。它使用带有EllipseGeometry的路径,因为该路径居中(而不是像Ellipse那样对齐顶部/左侧)。它也不会绘制笔触,只是将笔触的粗细添加到椭圆的半径上。
var transform = new TranslateTransform(canvas.ActualWidth / 2, canvas.ActualHeight / 2);
var radius = 14;
var circle = new Path
{
Data = new EllipseGeometry(new Point(), radius, radius),
Fill = Brushes.White,
RenderTransform = transform
};
canvas.Children.Add(circle);
var animation = new DoubleAnimation
{
To = radius,
Duration = TimeSpan.FromSeconds(3),
AutoReverse = true,
RepeatBehavior = RepeatBehavior.Forever
};
transform.BeginAnimation(TranslateTransform.XProperty, animation);
对于从中心点开始的从右到左和向后的重复动画,请使用负的BeginTime:
var transform = new TranslateTransform(
canvas.ActualWidth - radius, canvas.ActualHeight / 2);
var animation = new DoubleAnimation
{
To = radius,
Duration = TimeSpan.FromSeconds(6),
AutoReverse = true,
RepeatBehavior = RepeatBehavior.Forever,
BeginTime = TimeSpan.FromSeconds(-3)
};