windows phone中做动画其实很方便的,可以使用Blend拖来拖去就做出一个简单的动画,下面做了一个 ios屏幕小白点的拖动效果,包括速度判断移动

使用Blend生成以下代码

  1. <Storyboard x:Name="HandFunGTLSb"><!-- 向左滑动时动画 -->
  2. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="gridHandFun">
  3. <EasingDoubleKeyFrame KeyTime="" Value="-170"/>
  4. <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="-288"/>
  5. <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="-360"/>
  6. </DoubleAnimationUsingKeyFrames>
  7. </Storyboard>
  8. <Storyboard x:Name="HandFunGTRSb"><!-- 向右滑动时动画 -->
  9. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="gridHandFun">
  10. <EasingDoubleKeyFrame KeyTime="" Value="-170"/>
  11. <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="-100"/>
  12. <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value=""/>
  13. </DoubleAnimationUsingKeyFrames>
  14. </Storyboard>

被拖动的控件:

  <Grid Width="64" Height="444" Name="gridHandFun"
      HorizontalAlignment="Right"  Canvas.ZIndex="100"

      Margin="0,0,30,0"
      RenderTransformOrigin="0.5,0.5"
      ManipulationDelta="gridHandFun_ManipulationDelta"
      ManipulationCompleted="gridHandFun_ManipulationCompleted">

  1. <!-- ManipulationDelta 处理拖动事件 -->
    <!-- ManipulationCompleted 处理拖动完成事件 -->

             <Grid.RenderTransform>
  2. <CompositeTransform/>
  3. </Grid.RenderTransform>
  4.  
  5. <!-- 手(以下换成自己的控件) -->
  6. <local:ToggleButton x:Name="tglbtnHand" Grid.Row=""
  7. Tap="tglbtnHand_Tap" Tag="" RenderTransformOrigin="0.5,0.5">
  8. <local:ToggleButton.RenderTransform>
  9. <CompositeTransform/>
  10. </local:ToggleButton.RenderTransform>
  11.  
  12. <Image Source="/Assets/HandFun/hand.png"/>
  13.  
  14. <local:ToggleButton.TappedContent>
  15. <Image Source="/Assets/HandFun/hand1.png"/>
  16. </local:ToggleButton.TappedContent>
  17. </local:ToggleButton>
  18.  
  19. </Grid>

前台写完了,我们来处理后台事件:

  1.     //处理拖动事件
        private void gridHandFun_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
  2. {
  3. Grid grid = sender as Grid;
  4. CompositeTransform compTrans = grid.RenderTransform as CompositeTransform;
  5.  
  6. compTrans.TranslateX += e.DeltaManipulation.Translation.X;
  7. compTrans.TranslateY += e.DeltaManipulation.Translation.Y;
  8.  
  9. System.Diagnostics.Debug.WriteLine("X的值:{0},Y的值:{1}", compTrans.TranslateX, compTrans.TranslateY);
  10.  
  11. }
  1. //处理拖动完成事件
    private void gridHandFun_ManipulationCompleted(object sender, System.Windows.Input.ManipulationCompletedEventArgs e)
  2. {
  3. CompositeTransform compTrans = gridHandFun.RenderTransform as CompositeTransform;
  4. double dCurrTranX = compTrans.TranslateX;
  5. double dCurrTranY = compTrans.TranslateY;
  6.     
          
           //获得手指滑动速度 x为水平滑动速度 y为垂直滑动速度
  7. Point pSpleed = e.FinalVelocities.LinearVelocity;
  8. System.Diagnostics.Debug.WriteLine("速度:X的值:{0},Y的值:{1}", pSpleed.X, pSpleed.Y);
  9.  
  10.        //当向左滑行的速度小于-700时,把控件向左滑,播放向左的动画 -700可以自己调整,我测试了一上,这个速度都可以达到
  11. if (pSpleed.X < -)
  12. {
  13. HandFunGTLSb.Begin();
  14. return;
  15. }
  16.  
  17.        //与上面相反
  18. if (pSpleed.X > )
  19. {
  20. HandFunGTRSb.Begin();
  21. return;
  22. }
  23.  
  24. //本次总运动距离
  25. double dTranX = e.TotalManipulation.Translation.X;
  26. double dTranY = e.TotalManipulation.Translation.Y;
  27.  
  28. System.Diagnostics.Debug.WriteLine("当前控件的CompositeTransform的X值:{0},Y的值:{1}", dCurrTranX, dCurrTranY);
  29. System.Diagnostics.Debug.WriteLine("Completed中X的值为:{0},Y的值为:{1}", dTranX, dTranY);
  30.  
  31. if (dCurrTranX <= -)
  32. {//往左
  33. var vTimeLines = HandFunGTLSb.Children;
  34. DoubleAnimationUsingKeyFrames daukf = ((DoubleAnimationUsingKeyFrames)vTimeLines[]);
  35. daukf.KeyFrames[].Value = dCurrTranX; //播放动画启动位置
  36.  
  37. int idiff = (int)( - -dCurrTranX);
  38. if (idiff < )
  39. {
  40. daukf.KeyFrames[].Value = (- + (idiff / ));
  41. }
  42. else if (idiff == )
  43. {
  44. return;
  45. }
  46. else if (idiff > )
  47. {
  48. daukf.KeyFrames[].Value = (dCurrTranX + -idiff / );
  49. }
  50.  
  51. HandFunGTLSb.Begin();
  52. }
  53. else if (dCurrTranX > -)
  54. {//往右
  55. var vTimeLines = HandFunGTRSb.Children;
  56. DoubleAnimationUsingKeyFrames daukf = ((DoubleAnimationUsingKeyFrames)vTimeLines[]);
  57. daukf.KeyFrames[].Value = dCurrTranX;
  58.  
  59. if (dCurrTranX == )
  60. return;
  61. else
  62. daukf.KeyFrames[].Value = (dCurrTranX / );
  63.  
  64. HandFunGTRSb.Begin();
  65. }
  66. }

这样就可以出现那种效果了

Windows Phone中使用Storyboard做类似 IOS 屏幕小白点的效果的更多相关文章

  1. 蓝松短视频SDK支持AE模板, 可做类似微商视频, 小柿饼的效果等

    AE模板: 是指设计师用Adobe After Effect做好各种视频动画,比如炫酷视频,文艺/搞笑的场景,相册效果等,根据我们的指导文件导出.蓝松SDK会解析导出的文件,自动还原成AE设计时的动画 ...

  2. <转>如何在iOS 7中设置barTintColor实现类似网易和 Facebook 的 navigationBar 效果

    转自:i‘m Allen的博客 先给代码:https://github.com/allenhsu/CRNavigationController 1. 问题的表现 相信很多人在 iOS 7 的适配过程中 ...

  3. 在asp.net中使用jQuery实现类似QQ网站的图片切割效果

    今天要给大家介绍一个asp.net结合jQuery来切割图片的小程序,原理很简单,大致流程是: 加载原图 --> 用矩形框在原图上选取区域并将选取的顶点坐标和矩形尺寸发送至服务器 --> ...

  4. 将WCF寄宿在托管的Windows服务中

    在我之前的一篇博客中我介绍了如何发布WCF服务并将该服务寄宿于IIS上,今天我再来介绍一种方式,就是将WCF服务寄宿在Windows服务中,这样做有什么好处呢?当然可以省去部署IIS等一系列的问题,能 ...

  5. 【spring】在spring cloud项目中使用@ControllerAdvice做自定义异常拦截,无效 解决原因

    之前在spring boot服务中使用@ControllerAdvice做自定义异常拦截,完全没有问题!!! GitHub源码地址: 但是现在在spring cloud中使用@ControllerAd ...

  6. Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果

    目前Android的实现是:有来电时,音乐声音直接停止,铃声直接直接使用设置的铃声音量进行铃声播放. Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果. 如果 ...

  7. 在iOS 7中使用storyboard(part 1)

    原文:Storyboards Tutorial in iOS 7: Part 1        感谢翻译小组成员heartasice热心翻译.如果您有不错的原创或译文,欢迎提交给我们,更欢迎其他朋友加 ...

  8. 详解 UWP (通用 Windows 平台) 中的两种 HttpClient API

    UWP (通用 Windows 平台) 应用开发者在构建通过 HTTP 与 Web 服务或服务器断点交互的应用时,有多种 API 可以选择.要在一个托管 UWP 应用中实现 HTTP 客户端角色,最常 ...

  9. 如何托管ASP.NET Core应用到Windows Service中

    (此文章同时发表在本人微信公众号"dotNET开发经验谈",欢迎右边二维码来关注.) 题记:正在构思一个中间件的设计,考虑是否既可以使用最新的技术,也可以兼顾传统的部署模式.所以有 ...

随机推荐

  1. VC++ 动态检测串口的热插拔(一)通过注册表实现

    在上一篇文章中讲述了如何通过循环遍历的方法获取可用串口,可是这样的方法过于暴力,难免会想有没有其他的办法那,嘿嘿,那是肯定会有的,不管什么问题,解决问题的方法永远都不止一种.下面讲述如何通过注册表来获 ...

  2. PL/SQL Developer 与tnsnames.ora

    PL/SQL Developer 是一款流行的oracle开发与管理的IDE. 在登录PL/SQL Developer时所选择的数据库依赖于tnsnames.ora文件中的信息. 如果我们安装了多个o ...

  3. sqlserver使用OpenQuery或OPENROWSET遇到的问题

    OpenQuery,OPENROWSET允许用户在链接服务器上查询.通过这种方法来得到查询的结果集.     1.在创建存储过程中,必须设置           SET   ANSI_NULLS   ...

  4. bzoj2243 sdoi2011 染色 paint

    明明是裸树剖 竟然调了这么久好蛋疼 大概是自己比较水的原因吧 顺便+fastio来gangbang #include<iostream> #include<cstring> # ...

  5. .net自定义控件

    一.[.net自定义控件]TextBox控件重写 之NumTextBox 参考博客:http://www.yongfa365.com/Item/NumTextBox.html 二.[.net自定义控件 ...

  6. 使用easy_install安装numpy、pandas、matplotlib及各种第三方模块

    倒腾了一晚上最终把题目中的环境配好了.以下简要说明.留作资料.并共享. 1.安装python. 在cmd中能进入python环境,通过把python路径加入到系统路径中就可以实现. 2.安装easy- ...

  7. Qt 学习之路 :Qt 模块简介

    Qt 5 与 Qt 4 最大的一个区别之一是底层架构有了修改.Qt 5 引入了模块化的概念,将众多功能细分到几个模块之中.Qt 4 也有模块的概念,但是是一种很粗的划分,而 Qt 5 则更加细化.本节 ...

  8. cocos2d-x项目过程记录(Objective-C转C++)

    (原创作品,欢迎转载,注明出处,谢谢:http://www.cnblogs.com/binxindoudou/admin/EditPosts.aspx?postid=3179335) 1.单例模式中, ...

  9. [转] nginx+FastCGI+c++

    from: http://www.cnblogs.com/xiaouisme/archive/2012/08/01/2618398.html 一 安装 目的:不需支持php等.就html就行了.步骤: ...

  10. 解除网页右键限制和开启网页编辑状态的js代码

    当访问页面右键被限制了怎么办?很好办!将以下代码添加进收藏夹,点击执行即可: javascript:alert(document.onselectstart = document.onbeforeco ...