通通玩blend美工(2)——时钟
谢谢大家对我上一篇Blend的支持:通通玩blend美工(1)——荧光Button 再接再厉再来一篇~~!
这篇是建立在已经看得懂上一篇为基础来写的,有些细节我就不说了,截了这么多张图....写起来很累的....
最终效果如下:
哇居然这么大...有点刷屏的嫌疑..
1.总体思路
分析上面效果--表盘+环形数字+时针+阴影各种logo装饰
表盘:由一些同心圆叠在一起,不同的圆用不同的渐变来填充背景以造成层次效果。
环形数字:画个圆,根据它创建布局路径,再往路径里添加数字。
时针:用钢笔工具画出来的尖三角形和直线。把其中心点设置到线的一端并和表盘中心点重合,这样就可以圆周运动了。
阴影和logo:阴影凸显其立体感,让其更真实。 logo起到装饰,讨好女朋友等作用。
2.设计过程
我们如何才能画出同心圆呢??
首先我们建个坐标系,就两个交叉的直线,分别设置水平居中和垂直居中,如下图:(一定要把Margin里的属性全设置为0,这样才能居中于整个画布)
我们选择圆圈工具,鼠标的小十字和坐标系的圆点重合,按住Alt+Shift画圆,就可以画出以鼠标初始坐标为圆心的圆形,这点和PS是一样的。依次画出同心圆。
为第一个圆设置背景为渐变,颜色按照自己喜欢设置。
设置好后,再旋转轮盘,让其高光斜着点,这样更真实。
再设置第二个圈的背景色,我的喜好如下图。
也是旋转,让其自然。
制作表盘,注意最下面,我们这里用的是径向渐变。
调到自己满意的效果如下图。
看上去有点卡通的感觉...我们同事选中3个圈,把其边框颜色设置为无。
这样看起来就真实多了。
接下来我们制作高光,让其看起来更漂亮,干净。如下图,画一个椭圆,以白色来填充。
我们这里要加一个蒙板,让其自然地过渡透明。设置如下。这里的蒙板和PS里稍有不同,我们都知道PS里是白色是要的,黑色是不要的,而Blend里是透明度为100的是完全存在,透明度为0的是完全不要。我这里做了个渐变,就从0-100的过渡透明度。对比下上图,是不是感觉从地摊货变金格货了?haha~
接下来,我门制作表盘上的那一圈数字。数字是排列成一个圆的,我们先画它排列的路径。先画个圆如下图
右键点击该圆,路径→创建布局路径。
这样就生成路径了,右键路径 添加PathListItem,添加路径上的项。再设置路径的Distribution属性为Even这样项目就均匀的围满路径了
数字有点太靠外了,我们选择路径依赖的那个圆(注意不是路径,而是那个圆,这里看下代码很容易理解了),调节它的大小,调节时也要按住Alt+Shift,效果不言而喻
我们设置如下属性,数字就会安不同的方向来排布了,如下图
接下来我们来做指针。用线工具还是钢笔工具随意了。如下图(也要依赖坐标圆心来画)
画好后选择两根线,生成复合路径,并设置填充(fill)为白色。为什么是空心的呢??因为路径没有闭合,我们用钢笔工具让他们闭合
这样画出时针,分针可以复制时针出来,变换一下就好。
制作秒针圆心,指针就画根线就行
最后再来调整一下让其更真实。先制作时钟的阴影。为最开始画的那个圆添加一个阴影效果,如下图。
然后再添加添加上各种喜欢的元素,让其看起来不单调。
3.动起来吧时钟~~
利用DateTime.Now来获取但前的时间,然后再根据时间分别设置时针、分针、秒针的角度,定义一个Timer来实时跟新角度,就可以让时钟跑起来啦~~
double secAngle;//初始归零角度
double minAngle;
double hourAngle;
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
secAngle = secRot.Rotation;//设置初始化角度
minAngle = minRot.Rotation;
hourAngle = hourRot.Rotation;
DispatcherTimer timer = new DispatcherTimer();//定义时间触发器
timer.Interval = TimeSpan.FromMilliseconds();//触发间隔时间
timer.Tick+=new EventHandler(timer_Tick);//时间到触发的方法
timer.Start();
}
private void timer_Tick(object sender, EventArgs e)
{
secRot.Rotation = secAngle + DateTime.Now.Second * ;//每秒转360/60=6度
minRot.Rotation = minAngle + DateTime.Now.Minute * ;//每分钟转360/60=6度
hourRot.Rotation = hourAngle + DateTime.Now.Hour * + DateTime.Now.Minute * 0.5;//每分钟转360/12+30/60*分钟数
}
前台代码:
<Path x:Name="min" Data="M60.196362,92 L4.6963625,0.5 C4.6963625,0.5 0.50000006,6.3115358 0.50000006,6.3115358 C20.324205,35.02882 40.148411,63.746101 59.972618,92.463387">
<Path.RenderTransform>
<CompositeTransform x:Name="minRot" Rotation="-148"/>
</Path.RenderTransform>
</Path>
<Path x:Name="hour" Data="M60.196362,92 L4.6963625,0.5 C4.6963625,0.5 0.50000006,6.3115358 0.50000006,6.3115358 C20.324205,35.02882 40.148411,63.746101 59.972618,92.463387">
<Path.RenderTransform>
<CompositeTransform x:Name="hourRot" Rotation="-148"/>
</Path.RenderTransform>
</Path>
<Path x:Name="sec" Data="M319.5,239.5 L436,305.33334">
<Path.RenderTransform>
<CompositeTransform x:Name="secRot" Rotation="-148"/>
</Path.RenderTransform>
</Path>
F5运行看看你的成果吧~~!
程序是不是比UI简单多了,同样完成个时钟,程序就这么点代码.....
源码下载:http://files.cnblogs.com/tong-tong/SilverlightApplication2.rar
终于画好了,UI和程序不同,交互性设计也是一门学科,那种色感,什么的只能靠感觉来掌握,貌似还只能来自经验,不然无乱怎么做都感觉就是不好看。这点我深有体会,和大家共同进步。
北京也没传说中的这么冷,我都没穿毛衣呢~~只是室内外温差比较有创意。谢谢大家支持~~~
转载请注明原始地址:http://www.cnblogs.com/tong-tong/archive/2011/12/09/2282551.html
(最近发现居然有人转载我得文章了,高兴~~不过居然没说明作者.....这次在图片里加logo应该不会错了,哈哈~~)
通通玩blend美工(2)——时钟的更多相关文章
- 通通玩blend美工(3)——可爱的云
原文:通通玩blend美工(3)--可爱的云 好久没有写这个系列的博客了,这里给个电梯吧,照顾新来的同学~~ 通通玩blend美工(1)——荧光Button 通通玩blend美工(2)——时钟 目前我 ...
- 通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~
原文:通通玩blend美工(8)--动态绘制路径动画,画出个萌妹子~ 2年前我在玩Flex的时候就一直有一个疑问,就是如何来实现一个蚊香慢慢烧完的Loading动画呢? 刚经历了某甲方高强度一个月的洗 ...
- 通通玩blend美工(6)下——仿iPhone滚动选择器的ListBox(交互逻辑)
原文:通通玩blend美工(6)下--仿iPhone滚动选择器的ListBox(交互逻辑) 上一篇我们已经把界面画出来了,这篇我们就来制作交互的逻辑吧.上一篇的电梯: http://www.cnblo ...
- 通通玩blend美工(7)——简约而不简单的块
原文:通通玩blend美工(7)--简约而不简单的块 最近在研发一个WPF快速开发框架,满脑子都是各种逻辑各种模式,写一篇比较休闲娱乐的博客,宣泄下我对美工的热爱. 我一直以来有意无意在手机应用或者各 ...
- 通通玩blend美工(6)上——仿iPhone滚动选择器的ListBox(UI设计)
原文:通通玩blend美工(6)上--仿iPhone滚动选择器的ListBox(UI设计) 好久没更新博客了,由于项目比较紧,期间收到不少园友的短消息,感谢大家对我的支持~~. 相信各位都在自己的神机 ...
- 通通玩blend美工(5)——旋转木马,交互性设计
原文:通通玩blend美工(5)--旋转木马,交互性设计 这一篇偏向于逻辑的比较多,放在这个系列里会不会欠妥呢?在中国交互性设计也是美工的份内职责哦~ 所以没有blend基础的人也可以看懂这篇文章,不 ...
- 通通玩blend美工(1)——荧光Button
原文:通通玩blend美工(1)--荧光Button 最近老大出差去了,光做项目也有点烦,写点教程消遣消遣(注:此乃初级教程,所以第一个消遣是本人消遣,第二个是指供各位看官消遣...) 看着各位大虾出 ...
- 通通WPF随笔(1)——基于lucene.NET让ComboBox拥有强大的下拉联想功能
原文:通通WPF随笔(1)--基于lucene.NET让ComboBox拥有强大的下拉联想功能 我一直很疑惑百度.谷哥搜索框的下拉联想功能是怎么实现的?是不断地查询数据库吗?其实到现在我也不知道,他们 ...
- Expression Blend4经验分享:文字公告无缝循环滚动效果
这次分享一个类似新闻公告板的无缝循环滚动效果,相信很多项目都会应用到这个效果.之前我也百度了一下,网上的一些Silverlight的文字或图片滚动效果,都是一次性滚动的,如果要做到无缝循环滚动,多数要 ...
随机推荐
- html css div img垂直居中
<head> <meta charset="UTF-8"> <meta name="Generator" content=&quo ...
- thinkphp3.1 发送email
//*********************发送邮件************************** Vendor('email'); //******************** 配置信息 * ...
- php实现 求int型数据在内存中存储时1的个数(函数都可自己实现)
php实现 求int型数据在内存中存储时1的个数(函数都可自己实现) 一.总结 一句话总结:函数我们自己都可以实现,尤其是很多基础函数,没有工具的时候自己写. 1.php进制转换函数? base_co ...
- [CSS] Nest a grid within a grid
A grid item can also be a grid container! Let’s see how to specify a grid within a grid.
- Linux 网络编程系列教程
一.基础理论篇 01.网络协议入门 02.LAN.WAN.WLAN.VLAN 和 VPN 的区别 03.IP 地址介绍 04.广播地址介绍 05.无连接和面向连接协议的区别 06.因特网的IP协议是不 ...
- signed 与 unsigned 有符号和无符号数
unsigned int a = 0; unsigned int b = -1; // b 为 0xffffffff unsigned int c = a - 1; // c 为 0xffffffff
- web项目的WEB-INF目录
WEB-INF是Java的WEB应用的安全目录.所谓安全就是客户端无法访问,只有服务端可以访问的目录. 如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问. ...
- 自绘实现半透明水晶按钮(继承CButton,设置BS_OWNERDRAW风格,覆盖DrawItem函数绘制按钮,把父窗口的背景复制到按钮上,实现视觉上的透明,最后通过AlphaBlend实现半透明)
运行效果 实现方法 1.给按钮加上BS_OWNERDRAW样式2.重载DrawItem函数,在这里绘制按钮3.关键之处就是把父窗口的背景复制到按钮上,实现视觉上的透明4.最后通过AlphaBlend实 ...
- [GeekBand ] 利用 pass by reference -to -const 编写高效规范的 c++代码
本文参考资料 : GeekBand 侯捷老师,学习笔记 Effective C ++ 侯捷译 条款20 开发环境采用:VS2013版本 首先:分析值传递的缺点 (一) class Person{ p ...
- 【BZOJ 1027】[JSOI2007]合金
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1027 [题意] [题解] 因为和为1; 所以只要知道两个属性第三个属性就能用1减出来了 ...