Xamarin中如何在点A与点B之间绘制曲线?

Xamarin 两点间通过控制点绘制曲线实现方案
你已有A、B、C三个点坐标的前提下,最简便的方式是通过二阶贝塞尔曲线实现绘制,C点作为控制点可直接调整曲线的弯曲效果,以下提供两种常用实现方式:
方案1:使用Xamarin.Forms自带Shapes控件(适用于Xamarin.Forms 4.7及以上版本)
无需额外引入第三方库,直接在XAML中声明即可:
<Path Stroke="Blue" StrokeThickness="4"> <Path.Data> <PathGeometry> <!-- StartPoint替换为你的A点坐标 --> <PathFigure StartPoint="20,50"> <QuadraticBezierSegment <!-- Point1替换为你的控制点C坐标 --> Point1="150,20" <!-- Point2替换为你的终点B坐标 --> Point2="300,100" /> </PathFigure> </PathGeometry> </Path.Data> </Path>
方案2:使用SkiaSharp绘制(适用于复杂绘图场景)
如果后续还有更多自定义绘图需求,推荐用SkiaSharp实现:
- 首先为共享项目和各平台项目安装NuGet包:
SkiaSharp.Views.Forms - 在XAML中添加Skia绘制画布:
<ContentPage xmlns:skia="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms"> <skia:SKCanvasView PaintSurface="Canvas_OnPaintSurface" /> </ContentPage>
- 后台实现绘制逻辑:
// 替换为你实际获取的三个点坐标 private readonly SKPoint _pointA = new SKPoint(20, 50); private readonly SKPoint _pointC = new SKPoint(150, 20); private readonly SKPoint _pointB = new SKPoint(300, 100); private void Canvas_OnPaintSurface(object sender, SKPaintSurfaceEventArgs e) { var canvas = e.Surface.Canvas; // 清空画布 canvas.Clear(SKColors.White); // 配置曲线画笔 var curvePaint = new SKPaint { Style = SKPaintStyle.Stroke, Color = SKColors.Blue, StrokeWidth = 4, IsAntialias = true }; // 构建贝塞尔曲线路径 var path = new SKPath(); path.MoveTo(_pointA); path.QuadTo(_pointC, _pointB); // 绘制曲线 canvas.DrawPath(path, curvePaint); }
注意事项
如果坐标是基于屏幕的绝对坐标,需要适配不同设备的密度:SkiaSharp中可以通过e.Info.RawSize和控件实际渲染尺寸的比例做坐标缩放,避免不同设备显示效果不一致。
内容的提问来源于stack exchange,提问作者Reza Abbasi
相关产品推荐
相关产品推荐

