投稿者 kojiro  (社会人) 投稿日時 2024/4/23 21:02:09
MauiTouch1として作ったプログラムを、公開しておきます。画像は少し違います。
 
MainPage.xaml:

ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MauiTouch1"
             x:Class="MauiTouch1.MainPage">
    <ContentPage.Resources>
        <local:GraphicsDrawable x:Key="drawable" />
    </ContentPage.Resources>
    <ScrollView>
        <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">


            <Label
                Text="グラフィック描画"
                x:Name="Text"
                FontSize="18"
                HorizontalOptions="Center" />

            <GraphicsView 
                Drawable="{StaticResource drawable}"
                x:Name="graph"
                HeightRequest="200" WidthRequest="200"
                StartInteraction="OnStartInteraction"
                EndInteraction="OnEndInteraction"
                />

        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

MainPage.xaml.cs
 
namespace MauiTouch1;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void OnStartInteraction(object Sender, TouchEventArgs evt)
    {
        PointF firstPoint = evt.Touches.FirstOrDefault();
        string msg = $"Touch/click at {firstPoint}";
        Text.Text = msg;
    }
    private void OnEndInteraction(object Sender, TouchEventArgs evt)
    {
        PointF lastPoint = evt.Touches.LastOrDefault();
        string msg = $", released at {lastPoint}";
        Text.Text += msg;
    }


}

public class GraphicsDrawable : IDrawable
{
    public void Draw(ICanvas canvas, RectF dirtyRect)
    {
        canvas.FillColor = Colors.DarkBlue;
        canvas.FillCircle(100, 100, 80);
        canvas.StrokeColor = Colors.LightPink;
        canvas.StrokeSize = 1;
        double rad = 0;
        float x1 = 200;
        float y1 = 100;
        for (int i = 0; i < 100; i++)
        {
            float x2 = (float)(Math.Cos(rad) * 100) + 100;
            float y2 = (float)(Math.Sin(rad) * 100) + 100;
            canvas.DrawLine(x1, y1, x2, y2);
            x1 = x2;
            y1 = y2;
            rad += Math.PI * (170.0 / 180.0);
        }
    }
}


です。MainPage.xamlで残っている最初の行
 
<?xml version="1.0" encoding="utf-8" ?>
 
 
は取らないと、エラーになります。