首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 多點觸控開發:慣性效果實作

     編輯:關於.NET

為何需要慣性

預設 ManipulationDelta 只在手指移動時更新位置,手指離開瞬間物件即停止,不符合真實物理直覺。WPF 提供 ManipulationInertiaStarting 事件,讓開發者定義平移、縮放、旋轉的初速度與減速度,模擬慣性滑動。

啟用慣性事件

在 Canvas 加入事件繫結:

<Canvas x:Name="touchPad" Background="Gray"
    ManipulationStarting="image_ManipulationStarting"
    ManipulationDelta="image_ManipulationDelta"
    ManipulationCompleted="image_ManipulationCompleted"
    ManipulationInertiaStarting="image_ManipulationInertiaStarting">

慣性參數設定

private void image_ManipulationInertiaStarting(object sender,
    ManipulationInertiaStartingEventArgs e)
{
    // 平移慣性
    e.TranslationBehavior = new InertiaTranslationBehavior();
    e.TranslationBehavior.InitialVelocity = e.InitialVelocities.LinearVelocity;
    e.TranslationBehavior.DesiredDeceleration = 10.0 * 96.0 / (1000.0 * 1000.0); // 10 inch/ms^2

    // 縮放慣性
    e.ExpansionBehavior = new InertiaExpansionBehavior();
    e.ExpansionBehavior.InitialVelocity = e.InitialVelocities.ExpansionVelocity;
    e.ExpansionBehavior.DesiredDeceleration = 0.1 * 96 / (1000.0 * 1000.0);

    // 旋轉慣性
    e.RotationBehavior = new InertiaRotationBehavior();
    e.RotationBehavior.InitialVelocity = e.InitialVelocities.AngularVelocity;
    e.RotationBehavior.DesiredDeceleration = 720 / (1000.0 * 1000.0); // 720 deg/ms^2
}

參數說明:

  • DesiredDeceleration 單位為 DIP/ms²(平移)、DIP/ms²(縮放)、度/ms²(旋轉)。數值越小滑動越遠。
  • 範例數值經調整後手感較自然,實際專案可依螢幕 DPI 與使用者測試微調。

執行示範

影片展示慣性效果:YouKu 線上觀看

原始碼下載

WpfInertia.zip

出處:https://www.cnblogs.com/gnielee/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved