#xamarin #xamarin.forms
#xamarin #xamarin.forms
Вопрос:
Как я могу преобразовать, например, view.WidthRequest
значение в пиксели платформы? Я ищу метод, подобный Device.ConvertToPixels(10)
.
Я хочу использовать его для рисования SkiaSharp. Например, я хочу нарисовать круг с обводкой = 10 дюймов (единицы измерения xamarin.forms), который будет преобразован в пиксели при рисовании.
Ответ №1:
Умножьте MainDisplayInfo.Density на (единицы измерения xamarin.forms), и вы получите эти пиксели.
Я создал метод.
double XamDIUConvertToPixels(double XamDIU)
{
var desplayinfo = DeviceDisplay.MainDisplayInfo;
var pixcels = desplayinfo.Density * XamDIU;
return pixcels;
}
Отображение устройства должно выполняться в потоке пользовательского интерфейса, иначе в iOS будет выдано исключение.
прочитайте это:https://learn.microsoft.com/en-us/xamarin/essentials/device-display?tabs=ios#platform-differences
Ответ №2:
Вы также можете сделать масштаб в верхней части чертежа, а затем использовать любые единицы измерения, которые вам нравятся.
Например, на 2-кратном дисплее вы можете сделать canvas.Scale(2)
, а затем нарисовать, как если бы это было 1x.
В случае Xamarin.Событие рисования форм, есть аргументы события, которые содержат всю необходимую информацию:
canvas.Scale(e.Info.Width / view.Width);
Кроме того, вы можете взглянуть на этот пост в блоге, где я демонстрирую некоторые вещи:https://dotnetdevaddict.co.za/2020/01/12/who-cares-about-the-view-anyway /
Ответ №3:
Вы могли бы попробовать приведенный ниже код:
В Android:
var dp = 100;
int pixel = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, dp, this.Resources.DisplayMetrics);
В Xamarin.Формы, попробуйте использовать службу зависимостей.
https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/introduction
Комментарии:
1. Как насчет iOS?
2. Для ios нет необходимости конвертировать. Формат получаемого значения — пиксель.