当前位置: 首页 > news >正文

C# Avalonia 16- Animation- SampleViewer - ReusableFollowExample

ReusableFollowExample.axaml代码

<UserControl xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"xmlns:local="using:AvaloniaUI"x:Class="AvaloniaUI.ReusableFollowExample"><Canvas Background="Transparent"><!-- 红色方块 --><local:FollowMouseCanvas Canvas.Left="0" Canvas.Top="0" Width="50" Height="50" Background="Red"><!-- 可以在这里放更多内容 --></local:FollowMouseCanvas><!-- 绿色方块 --><local:FollowMouseCanvas Canvas.Left="300" Canvas.Top="0" Width="50" Height="50" Background="Green"></local:FollowMouseCanvas><!-- 蓝色方块 --><local:FollowMouseCanvas Canvas.Left="0" Canvas.Top="300" Width="50" Height="50" Background="Blue"></local:FollowMouseCanvas></Canvas>
</UserControl>

ReusableFollowExample.axaml.cs代码

using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.VisualTree;
using Shares.Avalonia;
using System;namespace AvaloniaUI;public class FollowMouseCanvas : Canvas
{private Vector velocity;private Point lastMouse;private Canvas? parentCanvas;private readonly AnimationPlayer player = new AnimationPlayer();public FollowMouseCanvas(){player.Fps = 60;player.Loop = true;player.Duration = double.MaxValue;player.At(0).PlayGlobal(UpdatePosition);this.AttachedToVisualTree += (_, __) =>{EnsureParent();player.Start();};}private void EnsureParent(){parentCanvas = this.GetVisualParent() as Canvas;if (parentCanvas != null){parentCanvas.PointerMoved += OnPointerMoved;}}private void OnPointerMoved(object? sender, PointerEventArgs e){if (parentCanvas != null)lastMouse = e.GetPosition(parentCanvas);}private void UpdatePosition(double progress){if (parentCanvas == null)return;double left = Canvas.GetLeft(this);double top = Canvas.GetTop(this);if (double.IsNaN(left)) left = 0;if (double.IsNaN(top)) top = 0;var location = new Point(left, top);var toMouse = lastMouse - location;// 根据 progress 做周期性调制,比如让速度在一个周期中变化double followForce = 0.01 + 0.005 * Math.Sin(progress * 2 * Math.PI * 2); // 2Hz波动double drag = 0.8 + 0.1 * Math.Sin(progress * 2 * Math.PI); // 阻尼轻微变化velocity += toMouse * followForce;velocity *= drag;location += velocity;Canvas.SetLeft(this, location.X);Canvas.SetTop(this, location.Y);}
}
public partial class ReusableFollowExample : UserControl
{public ReusableFollowExample(){InitializeComponent();}
}

运行效果

image

 

http://www.zskr.cn/news/27090.html

相关文章:

  • 2025年五金零件加工厂家权威推荐榜:精密零件/小五金加工/五金精密零件加工专业实力与品质保障精选指南
  • 2025年10月deepseek排名优化推荐:高性价比解决方案市场报告
  • 评测阿里云 RDS for MySQL + DuckDB 架构:QuickBI 分析性能与兼容性实测
  • 大模型后训练
  • jq工具解析JSON数据操作示例
  • 技术面:Spring(循环依赖,spring与springboot的区别)
  • 2025年10月长白山度假酒店推荐:性价比与景观体验排行
  • 2025 年最新推荐!景观石厂家推荐排行榜,涵盖千层石 / 泰山石 / 鹅卵石等多品类,全方位解析优质品牌助您精准选择
  • 基于分类器AUC的无模型变点检测技术
  • 2025 年高强钢板厂家最新推荐排行榜:涵盖宝武 / 合金 / Q550D 等热门型号,优质企业综合实力甄选
  • 2025年10月中国AI关键词排名优化公司排行:五强实测评价
  • 2025 年铝板厂家最新推荐榜:聚焦优质铝板企业,为工业与建筑采购提供专业参考1100/3003/3004/5052/5083/ 6061铝板厂家推荐
  • 2025 年不锈钢板厂家最新推荐榜:精选优质 304/316L/310S 等材质厂家,助力企业高效采购规避劣质产品
  • 2025 年轻质抹灰石膏厂家最新推荐排行榜:实力企业全方位评测,含砂浆 / 耐水 / 高强耐水 / 底层 / 找平 / 抗裂 / 隔音类型产品优质厂家
  • 2025年北京市盈科律所:全球规模蝉联第一深度解析
  • 2025 年丝杆升降机厂家最新推荐榜单:聚焦行业优质企业,深度解析各品牌核心优势与选择要点滚珠/螺旋/伞齿轮/蜗轮丝杆升降机厂家推荐
  • 2025年烘干机厂家权威推荐榜:印染烘干机专业制造商,高效节能与稳定性能深度解析
  • 数据处理:取两位有效数字,运算,焦点事件,只允许填写数字(2025.10.12)
  • 2025年市面上碳晶板品牌口碑排行榜前十名推荐
  • 2025 年最新推荐!国内冷库厂家实力排行榜揭晓,含冷冻 / 保鲜 / 超低温等多类型冷库优质企业
  • 想做测开,是学Java还是Python?
  • 2025 年电缆桥架源头厂家最新推荐排行榜,聚焦规模、技术与市场影响力精选优质企业涵盖多类型桥架
  • 2025年市面上高杆灯品牌前十强终极选购指南
  • 2025年市面上高杆灯品牌排行榜前十名及选购指南
  • 2025年移动泵车厂家推荐排行榜,防汛泵车,水泵机组,应急排水泵车,柴油机水泵机组公司精选
  • 2025 年桥梁护栏厂家最新推荐排行榜:聚焦安全防护与耐用性能的优质企业实力甄选指南立柱式 / 网式 / 板式 / 景观 / 不锈钢桥梁护栏厂家推荐
  • 2025年废气治理/处理设备厂家权威推荐榜:专业技术与高效解决方案深度解析
  • 2025 年通风气楼厂家最新推荐排行榜:权威筛选通风气楼厂家,聚焦自然 / 屋顶 / 工业 / 电动 / 采光 / 钢结构 / 厂房 / 车间 / 开敞式 / 薄型通风气楼公司
  • 2025 年国内铅门生产厂家最新推荐排行榜:聚焦防辐射 / 手术室 / CT 室等场景精选优质品牌
  • 2025年市面上高杆灯品牌Top10权威推荐榜