当前位置:编程学习 > C#/ASP.NET >>

Multi-Touch 多点触屏 时,如何滑动图片显示下一张图片

我想在触摸屏上, 实现类似手机上的图片浏览。

使用了,Multi-Touch的 ManipulationStarting、ManipulationDelta、ManipulationInertiaStarting 事件

想要做到,控制缩放比例,最小1,最大2,当缩放到最小1时,滑动图片显示下一张图片。

我使用了这样来控制缩放比例,不知道对不对?

            if ((matrixTmp.M11 < 2) && (matrixTmp.M11 > 1))
            {
                matrix.ScaleAt(deltaManipulation.Scale.X, deltaManipulation.Scale.Y, center.X, center.Y);
            }

滑动图片显示下一张图片,该如何实现? 

在滑动时,会多次触发ManipulationDelta事件,在什么时机显示下一张图片呢??



代码

xaml------------------------------------

<Page x:Class="Images.Page2"
      xmlns="“
      xmlns:x=""
      xmlns:mc="" 
      xmlns:d="" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"  Loaded="Page_Loaded_1"
 Title="Page2">


cs:        -------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Collections;
using System.Windows.Media.Effects;


namespace Images
{
    /// <summary>
    /// Page2.xaml 的交互逻辑
    /// </summary>
    public partial class Page2 : Page
    {

        public int i = 0;
        public string str = "";
        bool state = false;
        public Point currentPosition;
        public int ncanvasImageW = 1000;
        public int nCurrID = 0;

        ArrayList newArrayList = new ArrayList();
        Image canvasImage = new Image();
        string gPath = "D:\\我的图片";

        public Page2()
        {
            InitializeComponent();
        }

        private void Page_Loaded_1(object sender, RoutedEventArgs e)
        {
           
            DirectoryInfo Dir = new DirectoryInfo(gPath);
            foreach (FileInfo file in Dir.GetFiles("*.jpg").OrderBy(f => f.Name))
            {
                str = file.ToString();
                newArrayList.Add(str);
            }
            nCurrID = 0;
            lstSel();
        }

        private void canvas_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
        {
            FrameworkElement element = (FrameworkElement)e.Source;
            Matrix matrix = ((MatrixTransform)element.RenderTransform).Matrix;

            //临时检测放大比例
            Matrix matrixTmp = ((MatrixTransform)element.RenderTransform).Matrix;

            ManipulationDelta deltaManipulation = e.DeltaManipulation;

            Point center = new Point(element.ActualWidth / 2, element.ActualHeight / 2);
            center = matrix.Transform(center);

            matrixTmp.ScaleAt(deltaManipulation.Scale.X, deltaManipulation.Scale.Y, center.X, center.Y);

            //控制缩放比例在 1~ 2 之间
            Console.WriteLine("matrixTmp.M11  " + matrixTmp.M11);
            if ((matrixTmp.M11 < 2) && (matrixTmp.M11 > 1))
            {
                matrix.ScaleAt(deltaManipulation.Scale.X, deltaManipulation.Scale.Y, center.X, center.Y);
            }

            matrix.Translate(e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y);

            //matrix.RotateAt(e.DeltaManipulation.Rotation, center.X, center.Y);    不旋转

            ((MatrixTransform)element.RenderTransform).Matrix = matrix;

        }


        private void canvas_ManipulationStarting(object sender, ManipulationStartingEventArgs e)
        {
            e.ManipulationContainer = canvas;
            e.Mode = ManipulationModes.All;
        }


        private void canvas_ManipulationInertiaStarting_1(object sender, ManipulationInertiaStartingEventArgs e)
        {
            e.TranslationBehavior.DesiredDeceleration = 0.0005;
        }


        private void lstSel()
        {
            if (nCurrID >= 0)
            {
                BitmapImage bitmapImage = new BitmapImage();

                bitmapImage.BeginInit();
                bitmapImage.UriSource = new Uri(gPath + "\\" + newArrayList[nCurrID].ToString());
                bitmapImage.EndInit();
                canvasImage.Source = bitmapImage;

                canvasImage.Width = ncanvasImageW;
                canvasImage.Height = ncanvasImageW;

                canvasImage.IsManipulationEnabled = true;
                canvasImage.RenderTransform = new MatrixTransform();

                Canvas.SetTop(canvasImage, (this.ActualHeight - ncanvasImageW) / 2 - 50);
                Canvas.SetLeft(canvasImage, (this.ActualWidth - ncanvasImageW) / 2);

                if (!state)
                {
                    canvas.Children.Add(canvasImage);
                    state = true;

                }

            }

        }


    }
}
WPF  多点触屏  --------------------编程问答-------------------- 触摸移动时,记录触摸起点与止点的,并移动长度确定是上移还是下移。
参考
 private void gridMain_TouchDown(object sender, TouchEventArgs e)
        {
            FrameworkElement el = sender as FrameworkElement;
            el.CaptureTouch(e.TouchDevice);
            TouchPositionDown = e.GetTouchPoint(gridMain);
        }

        private void gridMain_TouchUp(object sender, TouchEventArgs e)
        {
            FrameworkElement el = sender as FrameworkElement;
            el.CaptureTouch(e.TouchDevice);

            TouchPositionUp = e.GetTouchPoint(gridMain);

            double nMoveX = Math.Abs(TouchPositionUp.Position.X - TouchPositionDown.Position.X);
            double nMoveY = Math.Abs(TouchPositionUp.Position.Y - TouchPositionDown.Position.Y);

            if ((nMoveX > 50) && (TouchPositionUp.Position.X < TouchPositionDown.Position.X) && (this.gridNext.IsVisible)) 
            {
                nPage = nPage + 1;
                load();
            }
            if ((nMoveX > 50) && (TouchPositionUp.Position.X > TouchPositionDown.Position.X) && (this.gridBefor.IsVisible))
            {
                nPage = nPage - 1;
                load();
            }
        } --------------------编程问答-------------------- TouchPoint TouchPositionUp, TouchPositionDown;
补充:.NET技术 ,  .NET技术前瞻
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,