надеюсь, что у вас все хорошо.
Я пытался создать в своем приложении простую страницу, которая позволила бы пользователю рисовать на экране, следуя коду, опубликованному Microsoft. Однако я, должно быть, что-то испортил, потому что в настоящее время я сталкиваюсь с ошибкой «не могу конвертировать из« TouchTracking.TouchTrackingPoint »в« Xamarin.Forms.Point »». Кто-нибудь знает как это исправить?
Xaml
<?xml version="1.0" encoding="UTF-8"?>
<pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:skia="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms"
xmlns:tt="clr-namespace:TouchTracking.Forms;assembly=TouchTracking.Forms"
x:Class="NEA_I_MDL.Misc.Notes_Popup"
xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup">
<Grid BackgroundColor="White">
<skia:SKCanvasView x:Name="CanvasView" PaintSurface="CanvasView_PaintSurface"></skia:SKCanvasView>
<Grid.Effects>
<tt:TouchEffect Capture = "True" TouchAction="TouchEffect_TouchAction"></tt:TouchEffect>
</Grid.Effects>
</Grid>
</pages:PopupPage>
C#
using SkiaSharp;
using TouchTracking;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using SkiaSharp.Views.Forms;
namespace NEA_I_MDL.Misc
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Notes_Popup
{
Dictionary<long, SKPath> ActivePaths = new Dictionary<long, SKPath>();
List<SKPath> FinishedPaths = new List<SKPath>();
SKPaint Paint = new SKPaint
{
Style = SKPaintStyle.Stroke,
Color = SKColors.Black,
StrokeWidth = 10,
StrokeCap = SKStrokeCap.Round,
StrokeJoin = SKStrokeJoin.Round
};
public Notes_Popup()
{
InitializeComponent();
}
private void CanvasView_PaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs e)
{
}
SkiaSharp.SKPoint ConvertToPixel(Point pt)
{
return new SKPoint((float)(CanvasView.CanvasSize.Width * pt.X / CanvasView.Width),(float)(CanvasView.CanvasSize.Height*pt.Y / CanvasView.Height));
}
private void TouchEffect_TouchAction(object sender, TouchTracking.TouchActionEventArgs args)
{
switch (args.Type)
{
case TouchActionType.Pressed:
if (!ActivePaths.ContainsKey(args.Id))
{
SKPath path = new SKPath();
path.MoveTo(ConvertToPixel(args.Location));
ActivePaths.Add(args.Id, path);
CanvasView.InvalidateSurface();
}
break;
case TouchActionType.Moved:
if(ActivePaths.ContainsKey(args.Id))
{
SKPath path = ActivePaths[args.Id];
path.LineTo(ConvertToPixel(args.Location));
CanvasView.InvalidateSurface();
}
break;
case TouchActionType.Released:
if(ActivePaths.ContainsKey(args.Id))
{
FinishedPaths.Add(ActivePaths[args.Id]);
ActivePaths.Remove(args.Id);
CanvasView.InvalidateSurface();
}
break;
case TouchActionType.Cancelled:
if (ActivePaths.ContainsKey(args.Id))
{
ActivePaths.Remove(args.Id);
CanvasView.InvalidateSurface();
}
break;
}
}
void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
{
SKCanvas Canvas = args.Surface.Canvas;
Canvas.Clear();
foreach(SKPath i in FinishedPaths)
{
Canvas.DrawPath(i, Paint);
}
foreach (SKPath path in ActivePaths.Values)
{
Canvas.DrawPath(path, Paint);
}
}
}
}