WPF实现遮罩动画

叫美工设计了一个动画:打印机打出A4纸的过程

使用WPF实现,预研了关键技术:遮罩+位置偏移动画

一开始的时候遮罩层使用Tile brush 添加一张使用PS做的上半部分透明的png图片,用起来很别扭,老是出问题,几经调试终于正确

但是发现使用Gradient brush子类LinearGradientBrush 添加一个渐变更具适应性:

<UserControl.OpacityMask>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#00000000" Offset="0.5"/>
<GradientStop Color="#FFFFFFFF" Offset="0.5"/>
</LinearGradientBrush>
</UserControl.OpacityMask>


以下代码实现效果:点击按钮,动画逐渐显示


贴出源代码:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
 x:Class="AD.OfflineUI.wpf.UserControl1"
x:Name="UserControl">
<UserControl.Resources>
<Storyboard x:Key="OnPreviewMouseLeftButtonDown1">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="image">
<EasingDoubleKeyFrame KeyTime="0" Value="-100">
<EasingDoubleKeyFrame.EasingFunction>
<SineEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<QuinticEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</UserControl.Resources>
<UserControl.Triggers>
<EventTrigger RoutedEvent="UIElement.PreviewMouseLeftButtonDown" SourceName="button">
<BeginStoryboard Storyboard="{StaticResource OnPreviewMouseLeftButtonDown1}"/>
</EventTrigger>
</UserControl.Triggers>
<UserControl.OpacityMask>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#00000000" Offset="0.5"/>
<GradientStop Color="#FF000000" Offset="1"/>
</LinearGradientBrush>
</UserControl.OpacityMask>
<Grid x:Name="LayoutRoot" Background="AntiqueWhite" HorizontalAlignment="Left" VerticalAlignment="Top" Height="368">
<Image x:Name="image" Source="ADM脱机页面底部切图_Images/图层 36 副本.png" RenderTransformOrigin="0.5,0.5" Margin="0,178.328,0,104.922" d:LayoutOverrides="VerticalAlignment">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Image.RenderTransform>
  </Image>
<Button x:Name="button" Content="Button" HorizontalAlignment="Right" Height="41" VerticalAlignment="Bottom" Width="64"/>
</Grid>
</UserControl>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现WPF的三维动画,可以使用WPF的3D功能和动画功能结合起来。下面是一个示例代码,演示了如何在WPF中创建一个简单的三维动画: ```xaml <Window x:Class="Wpf3DAnimation.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WPF 3D Animation" Height="450" Width="800"> <Grid> <Viewport3D> <Viewport3D.Camera> <PerspectiveCamera Position="0, 0, 5" LookDirection="0, 0, -1" UpDirection="0, 1, 0" /> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <Model3DGroup> <GeometryModel3D> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="-1,-1,0 1,-1,0 -1,1,0 1,1,0" TriangleIndices="0 1 2 1 3 2" /> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <DiffuseMaterial Brush="Red" /> </GeometryModel3D.Material> </GeometryModel3D> </Model3DGroup> </ModelVisual3D.Content> </ModelVisual3D> <Viewport3D.Triggers> <EventTrigger RoutedEvent="Viewport3D.Loaded"> <BeginStoryboard> <Storyboard> <Rotation3DAnimation From="0,0,0" To="0,360,0" Duration="0:0:5" RepeatBehavior="Forever"> <Rotation3DAnimation.By> <AxisAngleRotation3D Axis="0,1,0" Angle="1" /> </Rotation3DAnimation.By> </Rotation3DAnimation> </Storyboard> </BeginStoryboard> </EventTrigger> </Viewport3D.Triggers> </Viewport3D> </Grid> </Window> ``` 这个示例中,我们创建了一个窗口,并在窗口中添加了一个Viewport3D元素。Viewport3D是用于显示3D内容的容器。我们在Viewport3D中添加了一个PerspectiveCamera元素作为相机,用于定义观察场景的位置和方向。 然后,我们创建了一个ModelVisual3D元素,并将其添加到Viewport3D中。ModelVisual3D用于包含3D模型的可视化内容。在这个示例中,我们创建了一个GeometryModel3D元素,并将其添加到ModelVisual3D的Content属性中。GeometryModel3D用于定义3D模型的几何形状和材质。 在GeometryModel3D中,我们使用MeshGeometry3D定义了一个简单的四边形,并使用DiffuseMaterial定义了材质为红色。 最后,我们在Viewport3D的Triggers中添加了一个EventTrigger,当Viewport3D加载完成时触发。在触发器中,我们创建了一个Storyboard,并在其中添加了一个Rotation3DAnimation,用于对模型进行旋转动画。通过设置From和To属性,我们定义了旋转的起始角度和结束角度。通过设置By属性,我们定义了旋转的增量。通过设置Duration属性,我们定义了动画的持续时间。通过设置RepeatBehavior属性,我们定义了动画的重复行为。 这样,当窗口加载完成时,模型就会开始旋转动画

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值