zoukankan      html  css  js  c++  java
  • wp之切换图片动画

      由于早前买了一部windows phone手机,也想借着手机开发一些关于windows phone的软件,先前有尝试做了一款简易备忘软件,最近在学习的过程中,竟然遇到了Canvas,Html5的Canvas跟安卓版本的比较相似,但是跟windows phone的Canvas就有点不同了,今天就试着利用canvas来做一个图片切换的程序。

      效果如下:

      图片切换的原理就是简单的2张重叠的图片,第一张被剪裁的区域逐渐变大,第二章图片逐渐显现出来。

      首先需要一个较大的Canvas容器,用于装载这些需要的图片,XAML代码如下:

    1 <Canvas x:Name="DisplayCanvas" Width="400" Height="600" HorizontalAlignment="Center" VerticalAlignment="Center">
    2 </Canvas>

      对图片进行裁剪,需要用到Canvas、PathGeometry(表示一个可能由弧、曲线、椭圆、直线和矩形组成的复杂形状)、LineSegmen(在PathFigure中的两个点之间创建一条直线。),如:当我们设置3个点的时候,会裁剪出一个三角形。

    1 private List<Canvas> m_images = new List<Canvas>();
    2 
    3 private PathGeometry m_displayClip = null;
    4 
    5 private LineSegment m_displayPoint1 = null;
    6 
    7 private LineSegment m_displayPoint2 = null;
    8 
    9 private Storyboard m_timer = null;

      以Canvas为容器来存放Image对象,并让赋予Canvas点击事件来触发切换图片的效果,代码如下:

     1 //添加Image对象
     2 var canvas = new Canvas
     3 {
     4     Width = MAX_WIDTH,
     5     Height = MAX_HEIGHT,
     6     Background = new SolidColorBrush { Color = Colors.White }
     7 };
     8 
     9 canvas.MouseLeftButtonDown += new MouseButtonEventHandler(DisplayImage);
    10 
    11 var uri = new Uri(imgPath, UriKind.Relative);
    12 var imgSurce = new BitmapImage(uri);
    13 
    14 var img = new Image
    15 {
    16     Source = imgSurce,
    17     Width = 384,
    18     Margin = new Thickness(8, 8, 0, 0)
    19 };
    20 
    21 canvas.Children.Add(img);

      然后利用PathGeometry、LineSegmen裁剪出剩下的部分,由于我们需要在每一次时间内实现动画的效果,这时就需要Storyboard了,它可以实现我们需要的动画效果。代码大致如下:

     1 if (m_movedHeight < MAX_HEIGHT)
     2 {
     3     m_movedHeight += MOVE_STEP;
     4     m_displayPoint1.Point = new Point(MAX_WIDTH, m_movedHeight);
     5     m_displayPoint2.Point = new Point(0, m_movedHeight);
     6     m_timer.Begin();
     7 }
     8 else
     9 {
    10     m_displaying = false;
    11     m_images[m_index++].Clip = null;
    12     InitCanvasOrder();
    13 }

      如果需要连续切换好几张图片,那么将Canvas.Clip设为NULL是必须的,不然会出现错误。

      这是一个简单的wp动画,如有错误,请告诉我,谢谢!

      源码在此

  • 相关阅读:
    Devexpress [汇总链接]
    [转]修改LayoutControlitem容器内的控件长宽
    How to hide border of XtraTabControl
    CEF / Chromium 重新编译2018 官网地址 一路是坑 千万别跟着官方step by step走一定多思考多查资料 因为改动地方太多了编译都每个版本都不一样
    c#:配置引用程序集的路径(分离exe和dll)和 如何处理[dllImport]中的程序集的加载 [笔记]
    [redis] -- 缓存雪崩和缓存穿透、缓存击穿问题解决方案篇
    [redis] -- 为什么那么快
    [redis] -- 集群篇
    [spring cloud] -- 服务注册与服务发现篇
    [spring cloud] -- 核心篇
  • 原文地址:https://www.cnblogs.com/ahl5esoft/p/2648346.html
Copyright © 2011-2022 走看看