[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 ...
随机推荐
- Linux修改用户组
usermod -g group loginname 强行设置某个用户所在组 usermod -G groups loginname 把某个用户改为 group(s) usermod -a -G gr ...
- 分布式缓存技术redis学习(一)——redis简介以及linux上的安装
redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...
- Toad for Oracle 授权权限
grant create session to 用户;//授予zhangsan用户创建session的权限,即登陆权限 grant dba to 用户; //授权dba权限,导入导出数据 grant ...
- 使用getUserMedia 调用摄像头
html5中一个有趣的 API,能够调用电脑的摄像头,结合 <video> 标签和 Canvas 就能在浏览器中拍摄照片了. 这里需要注意: 因为安全问题, chrome 对于本地文件禁用 ...
- WPF 之 文本框及密码框添加水印效果
1.文本框添加水印效果 文本框水印相对简单,不需要重写模板,仅仅需要一个 VisualBrush 和触发器验证一下Text是否为空即可. <TextBox Name="txtSerac ...
- Hosts文件是什么?
Hosts文件主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定.可以用文本文件打开!当用户在浏览器中输入一个需要登录的 网址时,系统会首先自动从Hosts文件中寻找对应的IP ...
- Java学习笔记——单例设计模式Singleton
单例设计模式:singleton 解决的问题: 确保程序在运行过程中,某个类的实例instance只有一份. 特点: 1 构造函数私有化 2 自己内部声明自己 3 提供一个public方法,负责实例化 ...
- POJ 2349 Arctic Network (最小生成树)
Arctic Network Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...
- 用pf透明地将流量从一台机器转到另一台机器上的缘起及实现方式对比
下面是也是我在12580工作时发生的事情,重新记录并发出来.这种特殊需求很考 验PF的功底.在新旧系统并存,做重构的时候有时很需要这种救急的作法.一.缘起miscweb1(172.16.88.228) ...
- hdu 1243 反恐训练营 最长公共字序列
此题的题意很明确,就是求最长公共子序列: #include<iostream> #include<algorithm> #include<cstdio> #incl ...