uwp - 做一个相对炫酷的动画按钮/按钮动画

简介: 原文:uwp - 做一个相对炫酷的动画按钮/按钮动画  看腻了系统自带的button animation何不尝试下自定义一个较为炫酷的动画顺便提升用户体验。效果图: 动画分为几个部分,分别是:内圆从中心放大(1)并同时渐隐(2),外圆从中心放大(3)并同时渐隐(4),按钮整体从中心缩小放大(5),非常简单对吧,代码也是。
原文: uwp - 做一个相对炫酷的动画按钮/按钮动画

  看腻了系统自带的button animation何不尝试下自定义一个较为炫酷的动画顺便提升用户体验。效果图:

动画分为几个部分,分别是:内圆从中心放大(1)并同时渐隐(2),外圆从中心放大(3)并同时渐隐(4),按钮整体从中心缩小放大(5),非常简单对吧,代码也是。

为了方便调用,我用一个自定义用户控件来做,图标是用iconfont,这样可以在任何地方使用,首先新建【AnimationButton.xaml】用户控件,前台代码将自动生成的部分替换:

<UserControl.Resources>
        <Storyboard x:Name="Storyboard">
            <!--整体缩小动画-->
            <DoubleAnimation From="0.5" To="1" Duration="00:00:0.5" 
            Storyboard.TargetName="AnGridScaleTransform3" 
            Storyboard.TargetProperty="ScaleY">
                <DoubleAnimation.EasingFunction>
                    <PowerEase  EasingMode="EaseInOut" 
                                         
                             />
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
            <DoubleAnimation From="0.5" To="1" Duration="00:00:0.5" 
            Storyboard.TargetName="AnGridScaleTransform3" 
            Storyboard.TargetProperty="ScaleX">
                <DoubleAnimation.EasingFunction>
                    <PowerEase EasingMode="EaseInOut" 
                             />
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
            
            <!--1-->
            <DoubleAnimation From="1" To="0" Duration="00:00:0.5" 
            Storyboard.TargetName="Angrid" 
            Storyboard.TargetProperty="Opacity">
                <DoubleAnimation.EasingFunction>
                    <PowerEase  EasingMode="EaseInOut" 
                                         
                             />
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>

            <DoubleAnimation From="0" To="2" Duration="00:00:0.5" 
            Storyboard.TargetName="AnGridScaleTransform" 
            Storyboard.TargetProperty="ScaleY">
                <DoubleAnimation.EasingFunction>
                    <PowerEase  EasingMode="EaseInOut" 
                                         
                             />
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
            <DoubleAnimation From="0" To="2" Duration="00:00:0.5" 
            Storyboard.TargetName="AnGridScaleTransform" 
            Storyboard.TargetProperty="ScaleX">
                <DoubleAnimation.EasingFunction>
                    <PowerEase EasingMode="EaseInOut" 
                             />
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
            <!--2-->
            <DoubleAnimation From="1" To="0" Duration="00:00:0.5" 
            Storyboard.TargetName="Angrid2" 
            Storyboard.TargetProperty="Opacity">
                <DoubleAnimation.EasingFunction>
                    <PowerEase  EasingMode="EaseInOut" 
                                         
                             />
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>

            <DoubleAnimation From="0" To="1" Duration="00:00:0.5" 
            Storyboard.TargetName="AnGridScaleTransform2" 
            Storyboard.TargetProperty="ScaleY">
                <DoubleAnimation.EasingFunction>
                    <PowerEase  EasingMode="EaseInOut" 
                                         
                             />
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
            <DoubleAnimation From="0" To="1" Duration="00:00:0.5" 
            Storyboard.TargetName="AnGridScaleTransform2" 
            Storyboard.TargetProperty="ScaleX">
                <DoubleAnimation.EasingFunction>
                    <PowerEase EasingMode="EaseInOut" 
                             />
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>
    </UserControl.Resources>
    <Grid x:Name="ABBg" Tapped="TsTapped">
        <Grid.RenderTransform>
            <ScaleTransform x:Name="AnGridScaleTransform3" CenterX="25" CenterY="25"/>
        </Grid.RenderTransform>
        <!--<Rectangle Fill="Red" x:Name="anm" Opacity="0" RadiusX="100" RadiusY="100">
            <Rectangle.RenderTransform>
                <ScaleTransform x:Name="AnGridScaleTransform" CenterX="25" CenterY="25"/>
            </Rectangle.RenderTransform>
        </Rectangle>-->
        <Grid Canvas.ZIndex="2" x:Name="Angrid" Opacity="1" Width="auto" HorizontalAlignment="Center" VerticalAlignment="Center" CornerRadius="{Binding ElementName=ab,Path=ActualWidth}" Background="{StaticResource ABColorA}">
            <Grid.RenderTransform>
                <ScaleTransform x:Name="AnGridScaleTransform" CenterX="25" CenterY="25"/>
            </Grid.RenderTransform>
        </Grid>
        <Grid Canvas.ZIndex="2" x:Name="Angrid2" Opacity="1" Width="auto" HorizontalAlignment="Center" VerticalAlignment="Center" CornerRadius="{Binding ElementName=ab,Path=ActualWidth}" Background="{StaticResource ABColorB}">
            <Grid.RenderTransform>
                <ScaleTransform x:Name="AnGridScaleTransform2" CenterX="25" CenterY="25"/>
            </Grid.RenderTransform>
        </Grid>
        <TextBlock x:Name="textblock_icon" Text="{Binding ElementName=ab,Path=Icon}" Style="{StaticResource system_iconfont}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>

  要注意修改的部分1是

{Binding ElementName=ab,Path=Icon}这里绑定了一个文本数据,就是iconfont图标u码,用你喜欢的方式改就行了,还有2是要改
{StaticResource ABColorA}
{StaticResource ABColorB}
引用了资源字典,就是内圆颜色和外圆的颜色而已。

后台代码就一个处理事件:

分别负责设置动画GRID的宽高和中心点
private void TsTapped(object sender, TappedRoutedEventArgs e)
        {
            Angrid.Opacity = 1;

            Angrid.Width = this.ActualWidth;
            Angrid.Height = this.ActualHeight;

            Angrid.CornerRadius = new CornerRadius(this.ActualWidth);
            AnGridScaleTransform.CenterX = this.ActualWidth / 2;
            AnGridScaleTransform.CenterY = this.ActualHeight / 2;





            Angrid2.Opacity = 1;

            
            Angrid2.Width = this.ActualWidth;
            Angrid2.Height = this.ActualHeight;

            Angrid2.CornerRadius = new CornerRadius(this.ActualWidth);
            AnGridScaleTransform2.CenterX = this.ActualWidth / 2;
            AnGridScaleTransform2.CenterY = this.ActualHeight / 2;


          


            

          
            AnGridScaleTransform3.CenterX = this.ActualWidth / 2;
            AnGridScaleTransform3.CenterY = this.ActualHeight / 2;
            if (Animation == 0)
            {
                
            }
            else
            {
               
            }
//启动动画 Storyboard.Begin(); }

  this.close();

目录
相关文章
|
4月前
水波纹按钮动画
水波纹按钮动画
24 0
水波纹按钮动画
|
5月前
|
小程序 JavaScript
小程序底部动画弹框
小程序底部动画弹框
41 0
|
12月前
|
前端开发
【30天30个小项目】菜单悬停动画
【30天30个小项目】菜单悬停动画
43 0
【30天30个小项目】菜单悬停动画
|
开发者
全屏控件| 学习笔记
快速学习全屏控件。
55 0
全屏控件| 学习笔记
|
开发者
全屏控件|学习笔记
快速学习全屏控件
73 0
全屏控件|学习笔记
|
XML API 数据格式
侧滑按钮
导入闭包 将以下语句倒入目录下build.gradle文件内
135 0
侧滑按钮
UGUI系列-鼠标移动到按钮上显示信息(Unity3D)
有时候图标不能很好的说明这个功能的解释,就需要一些说明性文字显示。就比如可以在鼠标移动到UI上面的时候显示文字。 那么如何在UGUI上,鼠标移动上去显示文字说明呢。 大家都知道,当鼠标移动到button按钮上面的时候会出现变化,主要是button这个组件在控制
|
C#
【WPF】使用Popup控件做浮窗/提示框
原文:【WPF】使用Popup控件做浮窗/提示框 需求:当鼠标移入某个区域时,弹出一个浮窗,以便用户进行下一步操作。 效果如下图: 当鼠标移入左上角的【多选显示】框内,出现下面的浮窗(悬浮在原UI之上)。
4186 0
|
前端开发 C# Windows
WPF之鼠标滑动切换图片
原文:WPF之鼠标滑动切换图片   在网上找了一会儿也没找到我想要的效果,还是自己动手,丰衣足食吧。   需求:当前面板中只显示一张图片,图片栏的下部有用来显示当前图片处于图片队列中的位置的圆球,并且点击下部栏内的圆球可以快速切换,附动画缓动效果。
1162 0
|
C# 前端开发
WPF 一个弧形手势提示动画
原文:WPF 一个弧形手势提示动画 这是一个操作提示动画,一个小手在屏幕上按照一个弧形来回运动 ...
697 0