[WPF] 用 OpacityMask 模仿 UWP 的 Text Shimmer 动画


1. UWP 的 Text Shimmer 动画

在 UWP 的 Windows Composition Samples 中有一个 Text Shimmer 动画,它用于展示如何使用 Composition Light。从下面的 Gif 可以看到,这个动画很简单,就是用 PointLight 从左到右扫过一行文字。

它的源码在这里:https://github.com/microsoft/WindowsCompositionSamples/tree/master/SampleGallery/Samples/SDK 14393/TextShimmer

虽然 WPF 没有 Composition Light,但要玩这个简单的动画任然没问题,就是用 OpacityMask 模仿一下而已。

2. OpacityMask

WPF 可以让元素根据它的 OpacityMask 变得透明或部分透明。OpactiyMask 是一个 Brush,这个Brush 的颜色将被忽略,只关心它的 alpha 通道。例如下面这段 Xaml:

<TextBlock HorizontalAlignment="Center"
           VerticalAlignment="Center"
           FontFamily="SegoeUI"
           FontSize="100"
           FontWeight="Thin"
           Foreground="DimGray"
           Text="Text Shimmer">
    <TextBlock.OpacityMask>
        <RadialGradientBrush x:Name="Brush" Center=".5,.5" GradientOrigin=".5,.5" RadiusX=".43" RadiusY="2">
            <GradientStop Color="Black" />
            <GradientStop Offset=".5" Color="#6000" />
            <GradientStop Offset="1" Color="#2000" />
        </RadialGradientBrush>
    </TextBlock.OpacityMask>
</TextBlock>

它的实际效果如下:

看上去就和 PointLight 的效果差不过。TextBlock 的 OpacityMask 是一个圆形渐变画刷 RadialGradientBrush ,它并不关心各个 GradientStop 的颜色,只关心它们的 alpha 通道。也就是说,这个 RadialGradientBrush 让 TextBlock 从中心点向外渐渐变得透明。

3. RadialGradientBrush

上面的 OpacityMask 是一个 RadialGradientBrush,RadialGradientBrush 代表一个圆形的渐变画刷,在这里我们要关心它的三个属性:

RadiusX/RadiusY: 圆形的水平/垂直半径。
Center: 圆形的最外围的中心。
GradientOrigin: 渐变开始的二位焦点的位置。

这三个属性的作用可以参考下图:

4. 实现动画

最后,要实现 Text Shimmer 的动画效果只需要对 Center 和 GradientOrigin 做 PointAnimation,实现 OpacityMask 的水平移动:

<PointAnimation RepeatBehavior="Forever"
                Storyboard.TargetName="Brush"
                Storyboard.TargetProperty="Center"
                From="-2,.5"
                To="3,.5"
                Duration="0:0:3.3" />
<PointAnimation RepeatBehavior="Forever"
                Storyboard.TargetName="Brush"
                Storyboard.TargetProperty="GradientOrigin"
                From="-2,.5"
                To="3,.5"
                Duration="0:0:3.3" />

5. 源码

https://github.com/DinoChan/wpf_design_and_animation_lab

文章来源:https://www.cnblogs.com/dino623/p/implementing_text_shimmer_animation_with_opacitymask.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:C# 多线程入门系列(一)
下一篇:C# 扫描识别图片中的文字(.NET Framework)
评论列表

发表评论

评论内容
昵称:
关联文章

[WPF] OpacityMask 模仿 UWP Text Shimmer 动画
[WPF] Effect 实现线条光影效果
[WPF] 实现两个任天堂 Switch 加载动画
[WPF] 实现 WPF Inner Shadow
[WPF] 实现一个很久以前流行按钮样式
CSS鼠标hover 背景动画煽动效果
dotnetCampus.UITest.WPF 一个支持中文界面单元测试框架
[WPF] 抄一个 CSS3 实现按钮
模仿写了一个摸鱼应用解决原作者问题
网站分享
UWP】开发小技巧――判断类是否存在
css样式首行缩进2个长度宽度 text-indent 属性
WCF中常见报错:The content type text
Gif动画录制软件GifCam
WinUI 3 开发了一个摸鱼应用
【OpenXml】Pptx边框虚线转为WPF边框虚线
WPF开发随笔收录-仿安卓Toast
C# 值得永久收藏WPF项目实战(经典)
WPF对象级资源
WPF程序级资源

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码