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();

时间: 2024-12-28 19:31:31

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

手把手带你做一个超炫酷loading成功动画view Android自定义view

写在前面: 本篇可能是手把手自定义view系列最后一篇了,实际上我也是一周前才开始真正接触自定义view,通过这一周的练习,基本上已经熟练自定义view,能够应对一般的view需要,那么就以本篇来结尾告一段落,搞完毕设的开题报告后去学习新的内容. 有人对我说类似的效果网上已经有了呀,直接拿来就可以用,为什么还要写.我个人的观点是:第三方控件多数不能完全满足UI的要求,如果需要修改,那么必须理解他的实现,所以很有必要自己去写一款出来,成为程序的创造者,而不单单是使用者.所以,写一写已经实现的效果,

jQuery炫酷插入和移动元素动画特效插件

Magic Move是一款效果非常棒的jQuery炫酷插入和移动元素动画特效插件.这款插件可以以非常平滑的方式在指定元素之前插入其它元素,并且当最右边的元素超出容器时会自动下移插入到下一行的第一个位置. 在线演示:http://www.htmleaf.com/Demo/201503061473.html 下载地址:http://www.htmleaf.com/jQuery/Layout-Interface/201503061472.html

jQuery和CSS3炫酷滚动页面内容元素动画特效

jquery-smoove是一款jQuery和CSS3炫酷滚动页面内容元素动画特效插件.该内容元素动画插件在页面滚动到指定位置时,该位置的HTML元素会执行指定的CSS3动画特效,如旋转.翻转.放大缩小等动画特效. 使用Smoove页面滚动元素动画特效插件可以很轻松的制作出各种华丽的CSS3动画效果. 在线演示:http://www.htmleaf.com/Demo/201503021449.html 下载地址:http://www.htmleaf.com/jQuery/Layout-Inter

jQuery.smoove — jQuery和CSS3炫酷滚动页面内容元素动画特效插件

插件介绍: jQuery-smoove是一款jQuery和CSS3炫酷滚动页面内容元素动画特效插件.该内容元素动画插件在页面滚动到指定位置时,该位置的HTML元素会执行指定的CSS3动画特效,如旋转.翻转.放大缩小等动画特效.使用Smoove页面滚动元素动画特效插件可以很轻松的制作出各种华丽的CSS3动画效果. 基本用法 $('.smoove').smoove(options); 上面的代码会在class为 smoove 的元素上使用默认参数初始化 jQuery Smoove. 你可以通过dat

CSS3和SVG炫酷鼠标点击按钮效果

这是一组效果非常炫酷的HTML5 SVG和CSS3鼠标点击按钮特效.这组鼠标点击按钮特效共有22种效果,大多数是在伪元素上使用CSS3 animations来制作动画效果.非常适合于移动手机APP上的按钮触摸特效. 在线演示:http://www.htmleaf.com/Demo/201502121370.html 下载地址:http://www.htmleaf.com/html5/SVG/201502121369.html

知道你们不想撸代码写PPT之可视化页面做一款炫酷的WEB PPT

在线演示1 在线演示2 在线演示3 在线演示4 在线演示5 本地下载 原文链接:http://www.gbtags.com/gb/share/5743.htm 前段时间嘟嘟发布了一篇文章站在巨人的肩膀上——制作酷炫web幻灯片:http://www.gbtags.com/gb/share/5688.htm 给人第一眼感觉:卧槽!碉堡了;第二眼:卧槽!碉堡了;第三眼:卧槽!还要写代码! 于是在经过某些懒人的一番寻找找到了一个可视化的WEB PPT制作网页 地址:http://strut.io/ed

10款炫酷的jQuery和css3动画插件及源码

1.jQuery超酷平面时钟特效插件 这是一个非常具有创意的jQuery时钟插件,它不像其他的时钟插件一样是圆盘的或者是数字的,它是一个平面时钟,日期和时分秒的指针都是在平面上移动计时的,尽管这款jQuery平面时钟插件不能广泛应用,但是创意是绝对可以肯定的. 在线演示 源码下载 2.4款基于jquery的列表图标动画切换特效 网页中列表图标随处可见,特别是移动网页上,基本上的导航都采用了列表图标.今天给大家分享4款基于juqery的列表图标和关闭图标的动画切换特效. 在线演示 源码下载 3.随

前端每日实战:17# 视频演示如何用纯 CSS 创作炫酷的同心矩形旋转动画

效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/bMvbRp 可交互视频教程 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码. 请用 chrome, safari, edge 打开观看. https://scrimba.com/p/pEgDAM/cp2dZcQ 源代码下载 请从 github 下载. https://github.com/comehope/front-end-dai

8个超炫酷仿HTML5动画源码

1.jQuery万年历插件 带农历老皇历功能 这是一款基于jQuery的日历插件,这款日历插件和之前分享的日历控件有很大差异,它是一本万年历,包含了农历已经老皇历的功能,是一个挑好日子的工具.同时日历还可以查看本年度的放假安排,功能非常强大.有兴趣的朋友可以下载学习. 在线演示 源码下载 2.CSS3发光进度条动画 超炫酷的样式 这次我们要来分享一款非常炫酷的CSS3进度条动画,其样式风格类似于星球大战里面的那些激光剑效果.页面初始化时,可以设定进度条的值,但是我们也可以利用其配套的借口来动态改