Возможно, в приложении MAUI слишком много точек PathF.C#

Место общения программистов C#
Ответить
Anonymous
 Возможно, в приложении MAUI слишком много точек PathF.

Сообщение Anonymous »

День ТАК.
Я поигрался с Мауи, хотя уже много лет не прикасаюсь к Xamarin.
Проблема, с которой я столкнулся, связана со временем, затрачиваемым на отрисовку элементов PathF на холсте... я думаю
Итак, у меня есть элементы Image и Canvas на моем интерфейсе.В серверной части у меня есть IDrawable, который вызывается с шагом таймера.
Я не смог заставить StrokeColour принять градиент (насколько мне известно), поэтому выбрал условное добавление PathF элементы на холст в зависимости от возрастающего значения.
using Microsoft.Maui.Controls.Shapes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KeepYourFeet.Drawables
{
public class Route : IDrawable
{
private Color colour;
private double distance;
private bool drawOverride;

public Route(Color col, double dis)
{
colour = col;
distance = dis * 1.725;
drawOverride = false;
}
public Route(Color col, double dis, bool draw)
{
colour = col;
distance = dis * 1.725;
drawOverride = draw;
}

public void Draw(ICanvas canvas, RectF dirtyRect)
{
PathF path = new PathF();

#region Create Journey
if (0 == distance || (0 < distance && drawOverride)) path.MoveTo((float)422.00, (float)85.00);
if (1 == distance || (1 < distance && drawOverride)) path.LineTo((float)422.48, (float)86.00);
if (2 == distance || (2 < distance && drawOverride)) path.LineTo((float)422.95, (float)87.00);
if (3 == distance || (3 < distance && drawOverride)) path.LineTo((float)423.43, (float)88.00);
if (4 == distance || (4 < distance && drawOverride)) path.LineTo((float)423.90, (float)89.00);
// AND SO ON
if (2327 == distance || (2327 < distance && drawOverride)) path.LineTo((float)1711.00, (float)951.00);
#endregion

canvas.StrokeColor = colour;
canvas.StrokeSize = 5;
canvas.DrawPath(path);
}
}
}

Как видно, у меня получилось 2327 элементов, и обработка, похоже, убивает мое приложение.
Я не могу придумать лучшего способа постепенного рисования крошечных линий на экране. используя такие небольшие увеличения.
Вызывающий код не вызывает Canvas.Invalidate(), поэтому я предполагаю, что мои проблемы вызваны в первую очередь огромным количеством операторов.Будем признательны за любые рекомендации (кроме «это глупо»).
Вот интерфейс


























и часть серверной части
using KeepYourFeet.Database;
using KeepYourFeet.Database.Models;
using KeepYourFeet.Drawables;
using KeepYourFeet.GPS;
using Microsoft.Maui.Controls.Shapes;
using System.Diagnostics;

namespace KeepYourFeet;

public partial class MapPage : ContentPage
{
private double xOffset;
private double yOffset;
private double currentScale;
private double startScale;
private double distanceTotal = 1350;
private double distanceMiles;
private GPSLocation gpsLocation;
private IDispatcherTimer timer;
private Location? prevLocation;
private DataAccessLayer DAL;
private double index = 0;

public MapPage()
{
InitializeComponent();

#if ANDROID
{
Android.App.Activity? currAct = ActivityStateManager.Default.GetCurrentActivity();
if (currAct != null) { currAct.RequestedOrientation = Android.Content.PM.ScreenOrientation.Portrait; }
}
#endif

DAL = new DataAccessLayer();
gpsLocation = new GPSLocation();

//GetPreviousLocation();

Подробнее здесь: https://stackoverflow.com/questions/785 ... s-possibly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»