День ТАК.
Я поигрался с Мауи, хотя уже много лет не прикасаюсь к 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
Возможно, в приложении MAUI слишком много точек PathF. ⇐ C#
Место общения программистов C#
-
Anonymous
1719927468
Anonymous
День ТАК.
Я поигрался с Мауи, хотя уже много лет не прикасаюсь к Xamarin.
[b] Проблема, с которой я столкнулся, связана со временем, затрачиваемым на отрисовку элементов PathF на холсте... я думаю[/b]
Итак, у меня есть элементы 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 элементов, и обработка, похоже, убивает мое приложение.
Я не могу придумать лучшего способа постепенного рисования крошечных линий на экране. используя такие небольшие увеличения.
Вызывающий код [b]не вызывает Canvas.Invalidate()[/b], поэтому я предполагаю, что мои проблемы вызваны в первую очередь огромным количеством операторов.Будем признательны за любые рекомендации (кроме «это глупо»).
Вот интерфейс
и часть серверной части
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();
Подробнее здесь: [url]https://stackoverflow.com/questions/78576083/maui-app-has-too-many-pathf-points-possibly[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия