WPFをつかってiPhoneやAndroidのようなスクロールを実現したいです。
タップで加速度がついて、次第に減速して止まるようなやつです。
いま、こんな感じで、オブジェクトを移動はできるようになりました。
が、開始時のstartpointと、終了時のendpointに同じ値が入ってしまって、距離をとれずにいます。
アドバイスお願いします。
xmal
<Window x:Class="swipe.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="450" Width="525">
</Canvas> </Window><Canvas Name="canvas"> <Image Name ="image" Source="C:\01.jpg" Stretch="None" MouseLeftButtonDown="image_MouseLeftButtonDown" MouseLeftButtonUp="image_MouseLeftButtonUp" MouseMove="image_MouseMove" />
C#
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace swipe {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private bool isDrag = false;
private Point dragOffset;
private Point startpoint;
private Point endpoint;
//加速度を処理するときは移動量の他に移動時間も取る。
TimeSpan 移動時間;
DateTime 移動開始時刻;
DateTime 移動終了時刻;
double 速度 = 0;
double 距離 = 0;
//慣性移動量の計算をする。
/// <summary> /// ドラッグ開始 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { 移動開始時刻 = DateTime.Now; UIElement element = sender as UIElement; if (element != null) { isDrag = true; startpoint = dragOffset = e.GetPosition(element); element.CaptureMouse(); } } /// <summary> /// ドラッグ終了 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (isDrag) { UIElement element = sender as UIElement; element.ReleaseMouseCapture(); endpoint = e.GetPosition(element); 移動終了時刻 = DateTime.Now; 移動時間 = 移動終了時刻 - 移動開始時刻; double 移動時間の小数点以下 = double.Parse(移動時間.ToString("fffffff")); double X = startpoint.X - endpoint.X;//ここらへん。 double Y = startpoint.Y - endpoint.Y; double 縦横2乗 = Math.Pow(X, 2) + Math.Pow(Y, 2); 距離 = Math.Sqrt(縦横2乗); Title = "X=" + X + " Y=" + Y + " " +縦横2乗+ " " + 距離 + "/" + 移動時間の小数点以下 + "(pixcel/10000000second)"; isDrag = false; } } /// <summary> /// ドラック中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void image_MouseMove(object sender, MouseEventArgs e) { if (isDrag) { Point point = Mouse.GetPosition(canvas); UIElement element = sender as UIElement; Canvas.SetLeft(element, point.X - dragOffset.X); Canvas.SetTop(element, point.Y - dragOffset.Y); } } }
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/12/01 08:16
退会済みユーザー
2015/12/01 08:36
2015/12/01 09:30
2015/12/01 09:52
退会済みユーザー
2015/12/02 00:18
2015/12/02 00:27
退会済みユーザー
2015/12/03 00:20
2015/12/03 00:29
退会済みユーザー
2015/12/08 08:53