上一讲咱们谈了新生助手主页的基本的设计,今天我们谈一谈关于展现实景地图时等动画的设计,即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开发]新生助手的开发过程与体会二的更多相关文章

  1. [windows phone开发]新生助手的开发过程与体会一

    功能需求分析: 1.  为到达学院的新生指路,给出所有路线,并给出必要提示: 2.  对学院建筑进行介绍: 3.  对学院周边环境(交通.购物.银行等)进行介绍: 4.  必要的应用设置 总体设计: ...

  2. [windows phone开发]新生助手的开发过程与体会三

    由于网络原因,新生助手开发介绍的博客近期一直没有更新,请大家见谅.今天向大家介绍一下新生助手中动态磁帖的实现. 在PhoneApplicationPage中添加如下引用 xmlns:toolkit=& ...

  3. Windows Service 开发,安装与调试

    Visual Studio.net 2010 Windows Service 开发,安装与调试 本示例完成一个每隔一分钟向C:\log.txt文件写入一条记录为例,讲述一个Windows Servic ...

  4. windows原生开发之界面疑云

        windows桌面开发,界面始终是最大的困惑.我们对前端工具的要求,其实只有窗体设计器.消息映射,过分点的话自适应屏幕.模型绑定.能够免于手工书写,其实这个问题并不复杂,但VS不实现.QT语法 ...

  5. Windows Phone开发(15):资源

    原文:Windows Phone开发(15):资源 活字印刷术是我国"四大发明"之一,毕昇在发明活字印刷术之后,他很快发现一个问题,随着要印刷资料的不断增加,要用到的汉字数目越来越 ...

  6. windows 驱动开发入门——驱动中的数据结构

    最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动 ...

  7. Kinect for Windows SDK开发学习相关资源

    Kinect for Windows SDK(K4W)将Kinect的体感操作带到了平常的应用学习中,提供了一种不同于传统的鼠标,键盘及触摸的无接触的交互方式,在某种程度上实现了自然交互界面的理想,即 ...

  8. Erlang在Windows上开发环境搭建全过程讲解目录

    我会按照下面的列表来一步一步讲解,在windows来开发Erlang所用到的一些工具,和知识.我会不停的添加和修正. Erlang运行时环境 Erlang开发工具选择 Rebar来构建,编译,测试,发 ...

  9. Windows驱动开发(中间层)

    Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385 ...

随机推荐

  1. SQL SERVER-Delete和Truncate的区别

    背景:       一般在删除表数据时候,通常会有执行两个SQL语句:delete和truncate,有条件的删除我们平时都会用delete,而如果全部删除,那我们通常都会选择truncate,因为这 ...

  2. C# 之 集合整理

    集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问):一个集合包括多个元素,即有一个集合类对象和N个元素对象. BCL(Base Class Library, 基类库) ...

  3. structs 2 学习总结(一)

      转发请注明出处 1.页面传值. 传值 前台 <s:form action="login1">//action 名字 需要在structs配置 用户<s:tex ...

  4. iOS UIwebView html 字符串转换

    解析json字段是一段html串,平常解析出来都能在uiwebview上正常显示,这却出现以下状况,文本内容夹杂好多不需要显示的字符,例如: NSString*string =@"<s ...

  5. 使用SourceTree

    SourceTree是个git的GUI软件. 教程将“使用Git”那个小节可视化,更为直观. 第一次启动的时候选择忽略,然后直接进入界面.  填入git地址与注册邮箱即可 例如mindset这本书的g ...

  6. [Android]天气App 1

    闲赋在家,无事可做就想着做点东西,于是乎把玩手机,我最常用的就是看天气,基本上我每天起来第一件事就是看天气,哈哈,用别人的这么爽,为什么不自己整一个关于天气的应用呢,墨迹天气.小米系统自带的天气.ya ...

  7. oracle lsnrctl

    Oracle 11G在windows 7系统上不需要设置系统环境变量. 在命令行环境中运行命令: echo %ORACLE_SID% 可以看到此变量并不存在.也可以到注册表验证: HKEY_CURRE ...

  8. EasyGUI的安装

    1.下载EasyGUI 在官方网站上下载http://easygui.sourceforge.net/将安装包下载下来,放到桌面上并解压. 2.安装EasyGUI ①在开始菜单的搜索中输入cmd,打开 ...

  9. 为DEDE织梦添加XMl网站地图

    在后台管理: 核心-频道模型-单页文档管理-增加一个新页面 模版文件放在你现在使用的templets目录下,sitemap.xml的内容如下 <?xml version="1.0&qu ...

  10. 转:关于视频H264编解码的应用实现

    转:http://blog.csdn.net/scalerzhangjie/article/details/8273410 项目要用到视频编解码,最近半个月都在搞,说实话真是走了很多弯路,浪费了很多时 ...