[windows phone开发]新生助手的开发过程与体会二
上一讲咱们谈了新生助手主页的基本的设计,今天我们谈一谈关于展现实景地图时等动画的设计,即Storyboard的应用。
在Windows phone中,Storyboard类表示通过时间线控制动画,并为其子动画提供对象和属性目标信息。它就相当于一个盒子,里面装有其他的动画对象,如DoubleAnimation、DoubleAnimationUsingKeyFrames...,我们可以分别为它们制定BeginTime,从而控制它们启动的时间。Storyboard提供了6个常用的动画属性选项,它们分别是AutoReverse(根据执行路线反向回到初始状态)、BeginTime、Duration、FillBehaviour、RepeatBehavior和SpeedRatio。
首先介绍一下偏移动画:主页的气球就是利用的偏移动画。偏移动画使用的是TranslateTransform类来创建的,它表示在二维坐标系中平移对象。通过TransformGroup可以应用多种变换。
利用工具箱向全景视图中添加一个image,将代码更改为
<Grid x:Name="ContentPanel" Grid.Row="" Margin="12,0,12,0">
<Image Name="img1" Source="/action/1.png" Margin="0,615,308,-350">
<Image.RenderTransform>
<TransformGroup>
<TranslateTransform/>
</TransformGroup>
</Image.RenderTransform>
</Image>
<Image Name="img2" Source="/action/2.png" Margin="72,615,236,-350">
<Image.RenderTransform>
<TransformGroup>
<TranslateTransform/>
</TransformGroup>
</Image.RenderTransform>
</Image>
</Grid>
你可以添加任意张图片作为你想要制作的动画,此处只添两张。然后我们创建Storyboard绑定它们。在
phone:PhoneApplicationPage
中添加如下代码
<phone:PhoneApplicationPage.Resources>
<Storyboard RepeatBehavior="Forever" x:Name="Bounce">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:01" Storyboard.TargetName="img1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:06" Value="-1000"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:02" Storyboard.TargetName="img" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:06" Value="-1000"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</phone:PhoneApplicationPage.Resources>
创建Storyboard
其中Storyboard中RepeatBehavior属性设为Forever,无限循环。设定平移方式是沿Y轴平移,设定好关键时间对应的关键值(即相对位置)(你可以自行调整试试看是什么效果),用TargetName绑定作用的对象。然后在后台代码的MainPage中添加
Bounce.Begin();
这个是用来启动故事版的,运行程序,你会发现气球在竖直方向平移运动。
之后尝试在气球(或者你的图片)运动到覆盖了我们的button时点击气球,看button有什么效果,是不是没有任何作用?因为气球将我们的鼠标“挡住了”,这可不是我们想要的结果。这里有一个属性,即鼠标的穿透事件,我们需要在Image的属性中的IsHitTestVisible设为false,默认为true,这样鼠标就可以穿透图片了。
<Image IsHitTestVisible="False" Name="img1" Source="/action/1.png" Margin="0,615,308,-350">
<Image.RenderTransform>
<TransformGroup>
<TranslateTransform/>
</TransformGroup>
</Image.RenderTransform>
</Image>
关于偏移动画就介绍这么多。接下来介绍一下翻转动画,怎么样一个图片翻转出来而不是直接显示出来。我们想要达到的效果是运行程序,图片不显示,点击按钮,图片翻转出来,点击除按钮和图片以外的区域图片翻转消失。
首先新建一个Windows phone应用程序,向其中添加一张图片和一个按钮,修改图片的代码如下
<Image Name="img1" HorizontalAlignment="Left" Height="136" Source="/Images/QuickLink_taobao.png" VerticalAlignment="Bottom"
Width="164" Visibility="Collapsed" Margin="251,0,0,226" Grid.Row="1">
<Image.RenderTransform>
<ScaleTransform/>
</Image.RenderTransform>
</Image>
我们将image的Visibility属性设为Collapsed让它不可见,同时定义了图片的变幻方式。
修改按钮代码如下
<Button Content="按钮" HorizontalAlignment="Left" VerticalAlignment="Top"
Name="button2" Margin="100,87,0,0" Grid.Row="1" ManipulationStarted="OnButtonManipulationStarted"/>
其中具体位置参数自行设定。同样为了实现动画效果,我们要为图片的出现和消失创建两个故事板
<phone:PhoneApplicationPage.Resources>
<Storyboard x:Name="Storyboard1">
<DoubleAnimationUsingKeyFrames x:Name="Daukf" Duration=" 0:0:1"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)"
Storyboard.TargetName="img1">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<CircleEase EasingMode="EaseIn"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard> <Storyboard x:Name="Storyboard2">
<DoubleAnimationUsingKeyFrames Duration="0:0:1"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)"
Storyboard.TargetName="img1">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1">
<EasingDoubleKeyFrame.EasingFunction>
<CircleEase EasingMode="EaseOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</phone:PhoneApplicationPage.Resources>
为图片的出现和消失创建故事板
绑定作用对象为img1,在后台代码中添加点击按钮的ManipulationStarted事件
void OnButtonManipulationStarted(object sender, ManipulationStartedEventArgs args)
{
img1.Visibility = System.Windows.Visibility.Visible;
Storyboard2.Begin();
args.Complete();
args.Handled = true;
}
args.Handled = true代表该事件已经处理过了,不需要再进一步向上传送处理,正常情况下事件会往可视化树的高层继续传递可能造成bug,这涉及到路由事件,大家可以自己去看一看,这不是今天的重点,不再介绍。这段代码将imag1的可见性设为可见,图片就出现了,此时故事版2启动,动画相应启动。
之后添加点击其它区域让图片消失的代码,我们需要重载OnManipulationStarted
protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
{
if (e.OriginalSource != img1)
{
Storyboard1.Begin();
Storyboard1.Completed += (o, args) =>
{
img1.Visibility = Visibility.Collapsed;
};
}
}
判断点击的区域,不是img1则故事板1启动,当动画完成后,图片消失。如果不等动画完成就直接让图片消失的话则不会看到动画效果。运行程序看一下我们的成果吧。
至于旋转动画、缩放动画、倾斜动画等读者可以去买一本书看看或者去网上搜一搜,都是大同小异,以后有时间我会继续向大家介绍,今天就介绍到这里。
总结一下,今天重点介绍了Storyboard的偏移动画和翻转动画,这其中又夹杂了一些实际项目中遇到的的像鼠标穿透事件、路由事件的处理等。没有单独向大家介绍某项单独技术而是用在实际开发项目中介绍我认为会更具有实际意义,相信对大家是有帮助的。这里提一下,为什么图片的显示没有用button的Click事件而是用的ManipulationStarted呢,大家可以试一下会出现什么效果。图片一定也能出现,但消失呢?自己试试吧!
下一讲将向大家介绍新生助手助手第二页中运用的动态磁帖,期待大家继续关注。如果大家发现什么问题尽管评论或者发送邮件到1031733198@qq.com,我会尽快给大家回复,如果是错误我会尽快修正。
[windows phone开发]新生助手的开发过程与体会二的更多相关文章
- [windows phone开发]新生助手的开发过程与体会一
功能需求分析: 1. 为到达学院的新生指路,给出所有路线,并给出必要提示: 2. 对学院建筑进行介绍: 3. 对学院周边环境(交通.购物.银行等)进行介绍: 4. 必要的应用设置 总体设计: ...
- [windows phone开发]新生助手的开发过程与体会三
由于网络原因,新生助手开发介绍的博客近期一直没有更新,请大家见谅.今天向大家介绍一下新生助手中动态磁帖的实现. 在PhoneApplicationPage中添加如下引用 xmlns:toolkit=& ...
- Windows Service 开发,安装与调试
Visual Studio.net 2010 Windows Service 开发,安装与调试 本示例完成一个每隔一分钟向C:\log.txt文件写入一条记录为例,讲述一个Windows Servic ...
- windows原生开发之界面疑云
windows桌面开发,界面始终是最大的困惑.我们对前端工具的要求,其实只有窗体设计器.消息映射,过分点的话自适应屏幕.模型绑定.能够免于手工书写,其实这个问题并不复杂,但VS不实现.QT语法 ...
- Windows Phone开发(15):资源
原文:Windows Phone开发(15):资源 活字印刷术是我国"四大发明"之一,毕昇在发明活字印刷术之后,他很快发现一个问题,随着要印刷资料的不断增加,要用到的汉字数目越来越 ...
- windows 驱动开发入门——驱动中的数据结构
最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动 ...
- Kinect for Windows SDK开发学习相关资源
Kinect for Windows SDK(K4W)将Kinect的体感操作带到了平常的应用学习中,提供了一种不同于传统的鼠标,键盘及触摸的无接触的交互方式,在某种程度上实现了自然交互界面的理想,即 ...
- Erlang在Windows上开发环境搭建全过程讲解目录
我会按照下面的列表来一步一步讲解,在windows来开发Erlang所用到的一些工具,和知识.我会不停的添加和修正. Erlang运行时环境 Erlang开发工具选择 Rebar来构建,编译,测试,发 ...
- Windows驱动开发(中间层)
Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385 ...
随机推荐
- QT 操作数据库
整理一下 QT 操作数据库的一些要点,以备以后的查询学习(主要是操作 mysql ). 首先,要查询相关的驱动是否已经装好了,可以用以下的程序进行验证: #include <QtCore/QCo ...
- Linux编程之《看门狗进程》
Intro 当我们编写服务器代码时,为了让自己的服务器在意外崩溃时能够及时的重启,软件看门狗就显示出它的作用了,该看门狗进程是通过fork一个子进程(业务进程),父进程一旦捕获到了子进程的结束信号就重 ...
- flume监控之ganglia
对于日志来说,我觉得监控意义不大,因为写的速度一般不会特别快,但是如果是spooldir source,里面一小时放入十几G的数据让flume解析,特别是在结合kafka或者其他框架的话,监控就显得重 ...
- Clairewd’s message
Problem Description Clairewd is a member of FBI. After several years concealing in BUPT, she interce ...
- 结合源码看nginx-1.4.0之nginx多进程机制详解
目录 0. 摘要 1. nginx多进程设计思想 2. nginx多进程设计数据结构 3. nginx进程间通信机制 4. 一个简单的多进程例子 5. 小结 6. 参考源码
- 浅析vb.net与vb6的不同
vb6.0与vb.net 都是微软公司推出的编程工具,而vb.net是在vb6的基础上发展而来的,其语法与VB6.0相似,但VB.net并不是VB6.0 的简单升级,而是增加了更多特性,其中重要的一点 ...
- 放飞App:移动产品经理实战指南
<放飞App:移动产品经理实战指南> 基本信息 原书名:App savvy:rurning ideas into iPhone and iPad Apps customers really ...
- 剑指Offer10 打印1到最大n位数
/************************************************************************* > File Name: 10_PrintT ...
- Simofox 2.7 - 基于 pcxFirefox 定制(停更)
••• 现已停止更新,无良作者转战 Google Chrome ••• 项目名称:Simofox (Simple + Cool + Firefox) 项目介绍:Simofox 中译名西蒙狐,目前项目版 ...
- oledb,odbc简易实体生成器.
DataSet to code file(C#)工具. 方便自己写的odbc或者oledb的东西用的. sql server或者oracle等大数据库已经有EF的支持. 一些其他数据库还是用oledb ...