zoukankan      html  css  js  c++  java
  • [Windows Phone] 如何通过代码实现Start Screen开始屏幕Tiles漂动效果和Layout变换效果?

    [Windows Phone] 如何通过代码实现Start Screen开始屏幕Tiles漂动效果和Layout变换效果?

    作者:sinodragon21/Nathan

    转载请注明出处 http://www.cnblogs.com/sinodragon21/archive/2012/07/20/2600948.html

     

    一、需求说明

    “搜狐新闻”的“频道”ParanormaItem页面:

    长按其中的某个方块,它会浮动起来,拖动它到新的位置,整个Canvas会重新布局,还伴有Layout变换动画,和WindowsPhone自身的Start Screen功能类似。 

    原始形态                    长按tile后浮动 

    二、最终完成的Demo截图

    initial.jpg added.jpg moving animation.jpg

    三、源代码

    下载页面 http://www.hugwp.com/forum.php?mod=viewthread&tid=3925 (最初发问是在卤面网,并且因为卤面网可以上传附件,所以源代码放在卤面网上了)

    四、核心设计思路

    1. FluidMoveBehavior (AppliesTo="Children")

     1 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="17,0,17,0">
     2             <ScrollViewer x:Name="scrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Disabled">
     3                 <Canvas x:Name="canvasMain" VerticalAlignment="Top">
     4                     <i:Interaction.Behaviors>
     5                         <el:FluidMoveBehavior AppliesTo="Children" Duration="0:0:1.5">
     6                             <el:FluidMoveBehavior.EaseY>
     7                                 <CubicEase EasingMode="EaseOut"/>
     8                             </el:FluidMoveBehavior.EaseY>
     9                             <el:FluidMoveBehavior.EaseX>
    10                                 <CubicEase EasingMode="EaseOut"/>
    11                             </el:FluidMoveBehavior.EaseX>
    12                         </el:FluidMoveBehavior>
    13                     </i:Interaction.Behaviors>
    14                     <Border x:Name="firstBorder" Height="173" Width="173" Background="Red" Margin="0,0,20,20" Canvas.Top="0" Canvas.Left="0" ManipulationStarted="Border_ManipulationStarted_1" ManipulationDelta="Border_ManipulationDelta_1" ManipulationCompleted="Border_ManipulationCompleted_1" Hold="firstBorder_Hold_1" Tap="firstBorder_Tap_1">
    15                     </Border>
    16                     <Border Height="173" Width="173" Background="#FF19A588" Margin="0,0,20,20" Canvas.Top="0" Canvas.Left="193" ManipulationStarted="Border_ManipulationStarted_1" ManipulationDelta="Border_ManipulationDelta_1" ManipulationCompleted="Border_ManipulationCompleted_1" Hold="firstBorder_Hold_1" Tap="firstBorder_Tap_1">
    17                     </Border>
    18                     <Border Height="173" Width="173" Background="#FF19C854" Margin="0,0,20,20" Canvas.Top="193" Canvas.Left="0" ManipulationStarted="Border_ManipulationStarted_1" ManipulationDelta="Border_ManipulationDelta_1" ManipulationCompleted="Border_ManipulationCompleted_1" Hold="firstBorder_Hold_1" Tap="firstBorder_Tap_1">
    19                     </Border>
    20                 </Canvas>
    21             </ScrollViewer>
    22         </Grid>

    注意点一:需要Reference:Microsoft.Expression.Interactions 和 System.Windows.Interactivity。

    注意点二:加入命名空间

    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:el="clr-namespace:Microsoft.Expression.Interactivity.Layout;assembly=Microsoft.Expression.Interactions"

    2. Canvas根据Children的index进行自动布局

    1         private void repfreshCanvasChildernPosition()
    2         {
    3             foreach (UIElement ue in canvasMain.Children)
    4             {
    5                 repositionCanvasChild(ue, canvasMain.Children.IndexOf(ue));
    6             }
    7         }
    1         private void repositionCanvasChild(UIElement ue, int newIndex)
    2         {
    3             Canvas.SetLeft(ue, (double)(newIndex % 2 * 193));
    4             Canvas.SetTop(ue, (double)(newIndex / 2 * 193));
    5             Border border = ue as Border;
    6             TextBlock txb = new TextBlock() { Text = newIndex.ToString(), VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center, FontSize = 50 };
    7             border.Child = txb;
    8         }

    五、动画总结

    动画的实现思路可以分为三种,按难度依次增加分别为:

    一年级难度:Storyboard + Animation

    二年级难度:VisualStateManager + VisualState

    三年级难度:Built-in Windows Phone behaviors (例如:上面的FluidMoveBehavior)

    六、相关链接

    http://www.hugwp.com/thread-3925-1.html

    http://www.hugwp.com/forum.php?mod=viewthread&tid=2012&reltid=3925&pre_pos=1&ext=CB

    -完。

    博文title英文:[Windows Phone] How to simulate floating tiles and LayoutTransform of Windows Phone Start Screen?

    转载请注明出处 http://www.cnblogs.com/sinodragon21/archive/2012/07/20/2600948.html

  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/sinodragon21/p/2600948.html
Copyright © 2011-2022 走看看