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

  • 相关阅读:
    学海无涯,回头是岸
    理想很丰满,现实很骨感
    CodeIgniter的工作过程(1)
    如何干净安装OS X El Capitan 全新安装OS X El Capitan方法
    如何让虚拟机通过物理机上安装的代理软件上网
    如何创建可引导的 macOS 安装器
    为什么穿袜子睡觉入睡更快 还能提高睡眠质量?
    Windows下的dll注入(使用CreateRemoteThread)
    Windows下MinGW与MSVC2015关于char指针的区别
    大小端的区分
  • 原文地址:https://www.cnblogs.com/sinodragon21/p/2600948.html
Copyright © 2011-2022 走看看