Windows Phone 8.1 Path按钮制作分享

前言

  经常在博客园看大家的文章,由于本人文笔太烂,没写过博客和小伙伴们分享过,昨天看到安卓同事做的那个按钮比较不错,就想着也做个。现在把过程写出来,请大家不吝赐教(第一次发博客不会排版。。。)大家凑合看吧

开始

  一般要做动画之前,习惯用blend先做个动画,因为blend做动画很快,可以方便的看到动画的效果,待动画调试差不多的时,用vs打开 (一个展开的动画和一个收回的动画,其实设置下Storyboard的AutoReverse属性可以自动执行收回的动画但是过程没办法控制,只能写两个动画分开)

根据需求,如有动画比较灵活,那就要把生成的xaml代码转化为C#代码了。(用blend的好处就是调试动画很方便转化为C#代码的时候也比较很简单),其中用到了四个动画X轴的平移,Y轴的平移,中心点的旋转,属性值的改变。

代码用到了关键帧动画,所以看起来比较长,其实可以不用关键帧动画,直接DoubleAnimation就行

这个动画主要控制五个按钮的旋转,从-360到0之间的旋转动画

        Storyboard expand = new Storyboard();
            for (int i = 0; i < 5; i++)
            {
                //旋转动画
                DoubleAnimationUsingKeyFrames rotation = new DoubleAnimationUsingKeyFrames();
                Storyboard.SetTargetProperty(rotation, "(UIElement.RenderTransform).(CompositeTransform.Rotation)");
                //只有动画在xaml中才可以使用这个方法
               // Storyboard.SetTargetName(rotation, "image" + i);

                Storyboard.SetTarget(rotation, this.FindName("image"+i) as Image);
                EasingDoubleKeyFrame startAngle = new EasingDoubleKeyFrame();
                startAngle.Value = -360;
                startAngle.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(0));
                rotation.KeyFrames.Add(startAngle);
                if (i==2)
                {
                    rotation.BeginTime = TimeSpan.FromMilliseconds(50);
                }
                else if (i==3)
                {
                    rotation.BeginTime = TimeSpan.FromMilliseconds(100);
                }
                else if (i==4)
                {
                    rotation.BeginTime = TimeSpan.FromMilliseconds(150);
                }
                EasingDoubleKeyFrame endAngle = new EasingDoubleKeyFrame();
                endAngle.Value = 0;
                endAngle.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(500));
                rotation.KeyFrames.Add(endAngle);
                expand.Children.Add(rotation);
            }

rotation.BeginTime = TimeSpan.FromMilliseconds(50);

这个是控制按钮出来时候的顺序,上面的按钮先执行动画。

Y轴平移的动画,每个按钮平移的距离不同所以只能用if else判断了。注意

//只有动画在xaml中才可以使用这个方法

// Storyboard.SetTargetName(rotation, "image" + i);

Storyboard.SetTarget(rotation, this.FindName("image"+i) as Image);//代码生成的动画用这个方法

   for (int i = 1; i < 5; i++)
            {
                //Y轴平移
                DoubleAnimationUsingKeyFrames ytransalte = new DoubleAnimationUsingKeyFrames();
                Storyboard.SetTargetProperty(ytransalte, "(UIElement.RenderTransform).(CompositeTransform.TranslateY)");
                Storyboard.SetTarget(ytransalte, this.FindName("image" + i) as Image);
                //起始点
                EasingDoubleKeyFrame ystartPoint = new EasingDoubleKeyFrame();
                ystartPoint.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(0));
                if (i == 1)
                {
                    ystartPoint.Value = 180;
                }
                else if (i == 2)
                {
                    ytransalte.BeginTime = TimeSpan.FromMilliseconds(50);
                    ystartPoint.Value = 140;
                }
                else if (i == 3)
                {
                    ytransalte.BeginTime = TimeSpan.FromMilliseconds(100);
                    ystartPoint.Value = 82;
                }
                else if (i == 4)
                {
                    ytransalte.BeginTime = TimeSpan.FromMilliseconds(150);
                    ystartPoint.Value = 10;
                }
                ystartPoint.EasingFunction = new PowerEase() { EasingMode = 0 };
               //终点
                EasingDoubleKeyFrame yendPoint = new EasingDoubleKeyFrame();
                yendPoint.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(500));
                yendPoint.Value = 0;
                yendPoint.EasingFunction = new PowerEase() { EasingMode = 0 };

X轴的动画大同小异,就不写了,下面是Image,是否显示属性值的改变(按钮还未出来的时候,是在页面隐藏的,收回按钮后,又隐藏)

    //改变属性值的动画
                ObjectAnimationUsingKeyFrames visi = new ObjectAnimationUsingKeyFrames();
                Storyboard.SetTargetProperty(visi, "(UIElement.Visibility)");
                Storyboard.SetTarget(visi, this.FindName("image" + i) as Image);

                DiscreteObjectKeyFrame startObj = new DiscreteObjectKeyFrame();
                startObj.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(0));
                startObj.Value = Visibility.Visible;

                DiscreteObjectKeyFrame endObj = new DiscreteObjectKeyFrame();
                endObj.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(500));
                endObj.Value = Visibility.Visible;

                if (i == 2)
                {
                    visi.BeginTime = TimeSpan.FromMilliseconds(50);

                }
                else if (i == 3)
                {
                    visi.BeginTime = TimeSpan.FromMilliseconds(100);
                }

                else if (i == 4)
                {
                    visi.BeginTime = TimeSpan.FromMilliseconds(150);

                }
                visi.KeyFrames.Add(startObj);
                visi.KeyFrames.Add(endObj);
                expand.Children.Add(visi);

上面是按钮展开的动画,还要写收回的动画,改下展开动画的代码就好了。

效果

前端代码

<Grid>
        <Canvas HorizontalAlignment="Left" Height="228" Margin="0,402,0,0" VerticalAlignment="Top"  Width="234">
            <Image x:Name="image0" Height="50" Width="50" Canvas.Top="180"  RenderTransformOrigin="0.5,0.5" Source="ms-appx:///Assets/Image/button1.png" Tapped="image0_Tapped">
                <Image.RenderTransform>
                    <CompositeTransform/>
                </Image.RenderTransform>
            </Image>
            <Image Visibility="Collapsed" x:Name="image1" Height="50" Width="50" Canvas.Left="45" Source="ms-appx:///Assets/Image/button2.png" RenderTransformOrigin="0.5,0.5">
                <Image.RenderTransform>
                    <CompositeTransform/>
                </Image.RenderTransform>
            </Image>
            <Image Visibility="Collapsed" x:Name="image2" Height="50"  Width="50" Canvas.Top="40" Canvas.Left="110" Source="ms-appx:///Assets/Image/button3.png" RenderTransformOrigin="0.5,0.5">
                <Image.RenderTransform>
                    <CompositeTransform/>
                </Image.RenderTransform>
            </Image>
            <Image Visibility="Collapsed" x:Name="image3" Height="50"  Width="50" Canvas.Top="98" Canvas.Left="150" Source="ms-appx:///Assets/Image/button4.png" RenderTransformOrigin="0.5,0.5">
                <Image.RenderTransform>
                    <CompositeTransform/>
                </Image.RenderTransform>
            </Image>
            <Image Visibility="Collapsed" x:Name="image4" Height="50"  Width="50" Canvas.Top="170" Canvas.Left="175" Source="ms-appx:///Assets/Image/button5.png" RenderTransformOrigin="0.5,0.5" >
                <Image.RenderTransform>
                    <CompositeTransform/>
                </Image.RenderTransform>
            </Image>
        </Canvas>

    </Grid>

 

时间: 2024-10-08 03:49:22

Windows Phone 8.1 Path按钮制作分享的相关文章

超漂亮的CSS3按钮制作教程分享

要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识. 开发环境 Adobe Dreamweaver CS6/Chrome浏览器 演示地址 演示地址 利用CSS3属性制作按钮,我们只需要用到Gradient属性,不用使用任何图片素材和JavaScript代码,仅仅通过CSS就能制作出好看的渐变按钮.按钮的大小可以通过CSS属性就能轻松的修改,而且它可以使用html的很多标签来制作,比如div,button,span,a,input[‘submit’]等等.下列案例就是通过CSS3制作的按

纯CSS3彩色边线3D立体按钮制作教程

今天我们来分享一款利用纯CSS3实现的3D按钮,这款按钮的一个特点是有彩色的边线,这让整个按钮显得比较多姿多彩,没那么枯燥无趣.本文不仅可以让大家看到演示效果,而且我们把制作教程也分享出来,首先来看看效果图: 我们也可以在这里看到这些按钮的DEMO演示. 接下来就来分享一下制作教程以及源代码,按钮的源代码主要由HTML和CSS两部分代码组成,先来看看HTML代码: <button class="blue"> <div class="wrapper"

(转)Windows下tail查看日志命令工具分享(转)

因为随笔无转载按钮,先说明原文地址是: Windows 下 tail 查看日志命令工具分享 使用方法: 下载后解压,把tail.exe 复制到 目录:C:\Windows\System32 下 文件下载>>tail.zip

WPF编程,通过Path类型制作沿路径运动的动画一种方法。

原文:WPF编程,通过Path类型制作沿路径运动的动画一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/87339456 From/To/By 类型动画的输入是From.To和By参数: KeyFrame类型动画的输入是关键帧: 而Path类型的动画输入则是PathGeometry,这是其最大特点. ?Path类型的动画是一种可以沿指定路径运动的动画, 使用DoubleAnimationU

WPF编程,通过Path类型制作沿路径运动的动画另一种方法。

原文:WPF编程,通过Path类型制作沿路径运动的动画另一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/87358989 上一篇文章给了一个这方面的例子,那个文章里是通过后台按钮事件进行动画的开始.停止.继续等. 这里给出的是通过前台XAML来实现. 1.前台 定义路径.定义运动的主体,这里是一圆. <Path Stroke="Black" StrokeThickness

为Windows窗口标题栏添加新按钮

为Windows窗口标题栏添加新按钮 对于我们熟悉的标准windows窗口来讲,标题栏上一般包含有3个按钮,即最大化按钮,最小化按钮和关闭按钮.你想不想在Windows的窗口标题栏上添加一个新的自定义按钮,满足你的个性化需求,从而也使自己的窗口更具特色呢? 下面我们就讨论一下在delphi中如何给窗口的标题栏上添加新的按钮. 一.实现起来要定义以下过程: 1. 定义DrawCaptButton过程,这个过程的功能是在指定的位置画出按钮. 在过程中要使用win32函数GetSystemMetric

使用Windows 7 USB/DVD Download Tool制作WIN7系统安装盘

微软发布的Windows 7 USB/DVD Download Tool用于建立WIN7 ISO镜像文件的U盘或DVD光盘副本.要建立一个可引导的U盘或DVD光盘,下载WIN ISO文件后运行Windows 7 USB DVD Download Tool制作,然后可以直接从制作的U盘或DVD盘启动安装WIN7系统. Windows 7 USB/DVD Download Tool安装文件Windows7-USB-DVD-Download-Tool-Installer-en-US.exe可从微软在线

Windows 7 USB DVD Download Tool 制作的U盘无法启动安装Windows7 SP1

以前用此工具安装Windows7一直正常,未遇到不能启动安装的问题.Windows7 SP1出来后,用此工具制作安装多台机器均不能引导安装(品牌机和兼容机均是如此 ),要么停留在光标闪烁的状态,要么就是无任何反应.原因可能是存在兼容性问题(据称此工具是给上网本用的),虽然用UltraISO可以制作并成功安装,但以下方法用微软自身的命令即可制作,方法如下: 一:准备一个4G以上的U盘插入计算机,以管理员身份运行CMD,依次运行以下命令(蓝色字体部分)完成U盘的分区格式化. 01.diskpart

Android实现Windows 8磁贴(Tile)样式按钮

<Android实现Windows 8磁贴(Tile)样式按钮> 效果图如下: 我在网上流传的代码基础上精简.整理出一个简单的类,我暂时把它命名为:Windows8TileImageView,即Windows 8磁贴(Tile)样式按钮,Windows8TileImageView其实就是继承于标准Android ImageView,单击该Windows8TileImageView有收缩.侧边收缩等比较有趣的效果.现在把Windows8TileImageView这个类的全部代码贴出来: pack