WPF和Expression Blend开发实例:模拟QQ登陆界面打开和关闭特效

不管在消费者的心中腾讯是一个怎么样的模仿者抄袭者的形象,但是腾讯在软件交互上的设计一直是一流的.正如某位已故的知名产品经理所说的:设计并非外观怎样,感觉如何.设计的是产品的工作原理.我觉得腾讯掌握了其精髓.在2013版的桌面版QQ中,腾讯的登陆界面在打开的时候有一个展开的过程,而关闭的时候有个收缩的过程.效果如图:

借助WPF和Expression Blend,我们可以轻易的实现这么一个效果,最终用比较慢的速率实现这个效果如下:

这个效果一共能够分成两个部分:展开和收缩,具体的代码如下:

收缩的代码:

<Storyboard x:Key="shrink">
                <DoubleAnimation From="1" To="0" Duration="0:0:6"
                                 Storyboard.TargetName="layoutroot"
                                 Storyboard.TargetProperty="(UIElement.OpacityMask).(GradientBrush.GradientStops)[0].Offset"/>
                <DoubleAnimation Duration="0:0:4.5" BeginTime="0:0:1.5" From="1" To="0"
                                 Storyboard.TargetName="layoutroot"
                                 Storyboard.TargetProperty="(UIElement.OpacityMask).(GradientBrush.GradientStops)[1].Offset"/>
                <ColorAnimation  Duration="0" From="#FF000000" To="#00000000" Storyboard.TargetName="layoutroot"
                                 Storyboard.TargetProperty="(UIElement.OpacityMask).(GradientBrush.GradientStops)[1].Color"/>
 </Storyboard>

展开的代码:

<Storyboard x:Key="spread">
                <DoubleAnimation From="0" To="1" Duration="0:0:6"
                                 Storyboard.TargetName="layoutroot"
                                 Storyboard.TargetProperty="(UIElement.OpacityMask).(GradientBrush.GradientStops)[0].Offset"/>
                <DoubleAnimation Duration="0:0:4.5" BeginTime="0:0:1.5" From="0" To="1"
                                 Storyboard.TargetName="layoutroot"
                                 Storyboard.TargetProperty="(UIElement.OpacityMask).(GradientBrush.GradientStops)[1].Offset"/>
                <ColorAnimation BeginTime="0:0:6" Duration="0" From="#00000000" To="#FF000000" Storyboard.TargetName="layoutroot"
                                 Storyboard.TargetProperty="(UIElement.OpacityMask).(GradientBrush.GradientStops)[0].Color" />
</Storyboard>

其实本质上就是用Storyboard控制OpacityMask的变化来实现效果,OpacityMask的的声明代码如下:

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

然后在后台代码中控制动画:

在构造函数中添加如下代码:

InitializeComponent();
sb= (System.Windows.Media.Animation.Storyboard)layoutroot.Resources["spread"];
sb.Completed += (s, e) =>
{
    sb = (System.Windows.Media.Animation.Storyboard)layoutroot.Resources["shrink"];
    sb.Completed += (sender, Event) => Application.Current.Shutdown();
};
if (sb != null)
{
    sb.Begin();
}

关闭按钮的事件如下:

private void OnClick(object sender, RoutedEventArgs e)
{
    if (sb != null)
       {
           sb.Begin();
       }
}

可以通过调节上面的动画中的时间来实现和qq登陆界面一样的效果.这只是一些简单的动画,所以可以直接在VS里编写,如果是一些更加复杂的动画,那就需要借助Blend来实现了,这个以后有机会再说吧.

时间: 2024-10-10 01:00:14

WPF和Expression Blend开发实例:模拟QQ登陆界面打开和关闭特效的相关文章

SWift开发实例之QQ登陆界面布局

// //  ViewController.swift //  QQ登录界面布局 // //  Created by 悦兑科技 on 15/1/14. //  Copyright (c) 2015年 BSY. All rights reserved. // import UIKit class ViewController: UIViewController { /// 定义属性 var QQNumber = UITextField() var PassNumber = UITextField(

WPF和Expression Blend开发实例:充分利用Blend实现一个探照灯的效果

本篇文章阅读的基础是在读者对于WPF有一定的了解并且有WPF相关的编码经验,对于Blend的界面布局有基础的知识.文章中对于相应的在Blend中的操作进行演示,并不会进行细致到每个属性的介绍.同时,本篇文章所用的Blend版本是5.0.40218.0,即VS2012对应的版本,对于其他版本的操作区别,请读者自行研究.Ok,我们现在开始,本篇文章最终的效果如下图所示: 好,我们开始分步介绍过程,除了最后设计的一个按钮的后台代码需要使用到代码之外,其余的操作我们都使用图形操作. 1.新建项目 打开B

WPF和Expression Blend开发实例:Loading动画

今天来点实际的,项目中可以真实使用的,一个Loading的动画,最后封装成一个控件,可以直接使用在项目中,先上图: 整个设计比较简单,就是在界面上画18个Path,然后通过动画改变OpacityMask的值来实现一种动态的效果. 因为整个过程比较简单,所以其实没有用到Blend,唯一一个需要注意的是Path的路径值是请美工从PS里生成的,路径如下: <Geometry x:Key="Block"> M291.15499,85.897525 C291.15499,85.897

WPF和Expression Blend开发实例:一个样式实现的数字输入框

今天来一个比较奇淫技巧的手法,很少人用,同时也不推荐太过频繁的使用. 先上样式: <Style x:Key="NumberTextBox" TargetType="{x:Type FrameworkElement}"> <EventSetter Event="PreviewTextInput" Handler="TextBox_TextInput"/> <Setter Value="Fa

WPF和Expression Blend开发实例:Adorner(装饰器)应用实例

装饰器-- 表示用于修饰 UIElement 的 FrameworkElement 的抽象类 简单来说就是,在不改变一个UIElement结构的情况下,将一个Visual对象加到它上面. 应用举例: 现在我们拥有一个文本框,但是我们需要限定输入的字符串,当输入的是非法字符串的时候,要求将文本框的四周包裹一个红色的边框.通常我们可以用Border将文本框包裹在里面,然后动态地改变它的颜色来实现功能.那么现在我们可以直接在文本框上面加一个装饰器来实现. Adorner类 AdornerLayer类

IOS学习 03 QQ登陆界面

学习IOS开发,现在做一个简单的QQ登陆界面的开发,如下图: 1.1 创建项目和设计界面,界面就如上图,两个Label,两个个text,加上一个Button登陆按键,界面比较简单,如下图. 2.2 说下属性设置,在输入QQ号码的文本框里,在属性Placeholder中输入“请输入QQ号吗”,这个属性当程序起动时,就会自动的在QQ号码的输入文本框中显示. 2.3  设置text的属性Clear Button=Appears while editing.这个属性是在程序运行时,在文本框输入QQ号码时

[iOS基础控件 - 3.1] QQ登陆界面

A.storyboard 控件版 1.label 2.textfield a.Keyboard Type 账号:Number Pad 密码:Number and Punctuation b.Placeholder:提示文字 c.Clear Button: Appears with editing 清除按钮 d.Secure Text Entry:密码格式输入 3.button 1 @interface ViewController () 2 @property (weak, nonatomic)

Android开发实例之miniTwitter登录界面的实现

原文: http://www.jizhuomi.com/android/example/134.html 本文要演示的Android开发实例是如何完成一个Android中的miniTwitter登录界面,下面将分步骤讲解怎样实现图中的界面效果,让大家都能轻松的做出美观的登录界面. miniTwitter登录界面效果图 先贴上最终要完成的效果图: miniTwitter登录界面的布局分析 首先由界面图分析布局,基本可以分为三个部分,下面分别讲解每个部分. 第一部分是一个带渐变色背景的LinearL

ios模仿qq登陆界面

给大家推荐两个学习的地址: 极客学院的视频:http://www.jikexueyuan.com/path/ios/ 一个博客:http://blog.csdn.net/lizhongfu2013/article/details/29210015 主要想要实现一个模仿的登陆界面 代码: // // LoginViewController.swift // IBM_LOGIN // // Created by dcintern on 6/26/15. // Copyright (c) 2015 d