上一讲咱们谈了新生助手主页的基本的设计,今天我们谈一谈关于展现实景地图时等动画的设计,即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. 直接对寄存器操作,实现usart的串口输出寄存器的配置

    就像前面提到的,我用的板子是一款stm32f107系列的板子,在这块板子上,已经开发出了一套比较成熟的库函数,这也就意味着你可以不用直接去操作存储器来实现某些功能.比方说对于USART来说可以直接通过 ...

  2. Tuple类型

    Tuple类型类似的体现了C#中的匿名类型 var person=new { Name="Eric"; Age=18: } 调用: Console.writeline( perso ...

  3. ORB:新一代 Linux 应用

    Orbital Apps 给我们带来了一种新的软件包类型 ORB,它具有便携软件.交互式安装向导支持,以及离线使用的能力. 便携软件很方便.主要是因为它们能够无需任何管理员权限直接运行,也能够带着所有 ...

  4. C++面向对象设计

    一. 组合(复合),继承,委托 1.composition(组合)has-a 1.1 组合举例:(Adapter 设计模式) 关系: 利用deque功能实现所有queue功能 template < ...

  5. LeetCode9 Palindrome Number

    题意: Determine whether an integer is a palindrome. Do this without extra space.  (Easy) 分析: 自己考虑的方法是利 ...

  6. 【阿里云产品公测】开放搜索服务 opensearch java jdk 应用体验之 机器人聊天

    作者:阿里云用户啊里新人 需求:基本实现智能聊天! 最近在开发一款机器人,希望实现基本的聊天功能,词库是有的,但是如果是做完全匹配这个出来的效果很悲催,   比如词库:你好,回答是:哈哈,很好啊. 如 ...

  7. Debian 8 安装 Nvidia 显卡驱动

    sudo apt-get install linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') nvidia-kernel-dkms 正在读取软件包列表.. ...

  8. 【HTML5 1】39个让你受益的HTML5教程

    闲话少说,本文作者为大家收集了网上学习HTML5的资源,期望它们能够帮助大家更好地学习HTML5. 好人啊! 只是,作者原来说的40个仅仅有39个,由于第5个和第8个是反复的. 原文在此! 1. 五分 ...

  9. 【开源项目10】安卓图表引擎AChartEngine

    安卓图表引擎AChartEngine(一) - 简介 http://blog.csdn.net/lk_blog/article/details/7645509 安卓图表引擎AChartEngine(二 ...

  10. Gradle基本知识点与常用配置

    查看原文:http://blog.csdn.net/u010818425/article/details/52268126 本文篇幅较长,文中系统地讲解了Gradle的基本知识点以及一些常用的命令和配 ...