我是WinRT和Blend的新手,我需要在我的WinRT应用程序中绘制数字1,2等绘图效果。要求就像应用程序将绘制数字。
任何帮助都将非常感激。
提前致谢。
答案 0 :(得分:13)
我认为你需要拼凑几个故事板来实现这一点,我真的建议你使用Blend吧!
打开一个空白项目,在对象和时间线下有一个加号,点击它并添加一个新的故事板。将故事板线的黄色条向前移动几毫秒。画一段动画,点击开始录制并稍微移动一下。停止录音。继续这样做,直到你有你想要的。 AS用于模仿绘图。分解你想要的样子,制作数字所包含的所有单独的部分,并将它们的不透明度设置为O.我建议使用关键帧(用于移动)和双重动画用于不透明度。
这是一条曲线后面的一条路径的快速演示,我把它做得非常快,所以它远离完美,但它是为了展示开始和停止以及它们如何一起看:
<Page
x:Class="App10.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App10"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" FontFamily="Global User Interface">
<Page.Resources>
<Storyboard x:Name="StoryboardA">
<PointAnimationUsingKeyFrames EnableDependentAnimation="True" Storyboard.TargetProperty="(Path.Data).(PathGeometry.Figures)[0].(PathFigure.StartPoint)" Storyboard.TargetName="path">
<EasingPointKeyFrame KeyTime="0:0:0.3" Value="107.647,394.591"/>
<EasingPointKeyFrame KeyTime="0:0:0.6" Value="147.75,352.713"/>
<EasingPointKeyFrame KeyTime="0:0:0.9" Value="197.45,311.391"/>
<EasingPointKeyFrame KeyTime="0:0:1.2" Value="268.45,251.392"/>
<EasingPointKeyFrame KeyTime="0:0:1.4" Value="346.45,196.392"/>
<EasingPointKeyFrame KeyTime="0:0:1.6" Value="417.45,151.392"/>
<EasingPointKeyFrame KeyTime="0:0:1.8" Value="503.841,99.7321"/>
<EasingPointKeyFrame KeyTime="0:0:2" Value="604.45,53.3924"/>
<EasingPointKeyFrame KeyTime="0:0:2.3" Value="705.45,13.392"/>
</PointAnimationUsingKeyFrames>
<PointAnimationUsingKeyFrames EnableDependentAnimation="True" Storyboard.TargetProperty="(Path.Data).(PathGeometry.Figures)[0].(PathFigure.Segments)[0].(LineSegment.Point)" Storyboard.TargetName="path">
<EasingPointKeyFrame KeyTime="0:0:0.3" Value="55.8129,445.539"/>
<EasingPointKeyFrame KeyTime="0:0:0.6" Value="95.9156,403.661"/>
<EasingPointKeyFrame KeyTime="0:0:0.9" Value="139.796,364.539"/>
<EasingPointKeyFrame KeyTime="0:0:1.2" Value="198.646,311.319"/>
<EasingPointKeyFrame KeyTime="0:0:1.4" Value="266.536,258.09"/>
<EasingPointKeyFrame KeyTime="0:0:1.6" Value="330.282,210.352"/>
<EasingPointKeyFrame KeyTime="0:0:1.8" Value="408.248,157.542"/>
<EasingPointKeyFrame KeyTime="0:0:2" Value="500.776,106.108"/>
<EasingPointKeyFrame KeyTime="0:0:2.3" Value="597.831,60.216"/>
</PointAnimationUsingKeyFrames>
</Storyboard>
</Page.Resources>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Path Data="M73.5,639.5 C73.5,639.5 539.5,33.5 1289.5,79.5 L1535,101.5" HorizontalAlignment="Left" Height="572.492" Margin="68.5,72.008,-174,0" Stretch="Fill" Stroke="Red" StrokeThickness="10" UseLayoutRounding="False" VerticalAlignment="Top" Width="1471.5"/>
<Path x:Name="path" HorizontalAlignment="Left" Height="507.972" Margin="66.05,137.358,0,0" Stroke="#FFFFE100" StrokeThickness="15" UseLayoutRounding="False" VerticalAlignment="Top" Width="712.95">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="53.45,448.392">
<LineSegment Point="7.50001,500.472"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Grid>
这是一个它看起来如何的图像,它是黄色的东西 - 弯曲的运动只是一个例子,表明你可以拼凑起来创造你想要的任何运动。称为缓和功能的东西甚至可以为你做到这一点,见下图。
以下是可用的缓动功能,可以与它们一起使用,并结合故事板中的项目来创建所需的效果。
The different easing functions are well explained here on MSD L
上面的示例中没有双重动画,但它们看起来像这样:
<Storyboard x:Name="myStoryboard">
<DoubleAnimation Duration="0:0:1"
Storyboard.TargetName="myImage"
Storyboard.TargetProperty="Opacity"
From="0" To="1" />
</Storyboard>
这是一项很重要的工作,需要时间。我建议你坐下来学习如何使用Blend并在使用之前使用故事板。那里有许多很棒的教程,值得花时间。就个人而言,我倾向于让设计师帮助制作动画,正如您在上面的故事板中看到的那样,我不是动画专业人士 - 需要牢记的是,特别是在应用程序性能方面。 / p>
我还想指出现代用户界面背后的一些主要思想,即Windows应用商店应用程序所需的设计语言,那就是保持真实的数字化。该应用程序不应该模仿现实生活中的东西,没有任何意义,因为它是一个应用程序,而不是“现实”。
来自MSDN: 真实数字 充分利用数字媒体。 消除物理边界,创造比现实更高效,更轻松的体验。 接受我们在屏幕上是像素的事实。 设计大胆,鲜明,清晰的色彩和图像,超越了现实世界的材料。
所以想一想,也许你不需要绘画动作。也许只是快速消失,就像这样:
<Page
x:Class="App10.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App10"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" FontFamily="Global User Interface">
<Page.Resources>
<Storyboard x:Name="StoryboardB">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="textBlock">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Page.Resources>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Height="145" Margin="465,386,0,0" TextWrapping="Wrap" Text="AB" VerticalAlignment="Top" FontSize="50" Width="343"/>
</Grid>
答案 1 :(得分:5)
WinRT XAML Toolkit有一个RingSlice控件,您也可以使用它并为其StartAngle / EndAngle设置动画,以便轻松地将圆弧动画化为圆形。请注意,这个和Iris的解决方案都需要在动画上设置EnableDependentAnimation,这是一个安全措施,告诉您它们可能执行得不好,因为它们需要在UI线程上运行代码,并且会导致布局重新计算,特别是在复杂的场景中。如果结果很慢(特别是在像ARM这样的慢速设备上),我会尝试的一件事是覆盖具有相同中心点的较小弧,并使用围绕该中心点的RenderTransform动画旋转它们以获得相同的效果。这会有点复杂,但有可能跑得更快。您可以平衡UI线程上的动画成本与覆盖多个弧并编排动画序列的成本。
答案 2 :(得分:0)
绘制弧的另一种通用解决方案是允许使用独立动画,因此可能运行得更顺畅,可以使用两个用RectangleGeometry
Clip
剪切的重叠椭圆并为{动画化{剪辑的{1}}逐渐显示弧形。你需要其中两个才能使弧的起点和终点具有任意角度的帽(末端)。
快速模拟任意形状或元素的绘制(包括数字)也是一种简单的解决方案。
答案 3 :(得分:0)
如果您构建自定义控件并需要为其设置依赖项属性的动画,我已经撰写了一篇博文来帮助http://danielgary.net/animating-custom-dependencyproperties/
它的主旨是为您的依赖属性更改时更新事件并更新其中的布局代码。