Лучший способ отображения изображений в формах Xamarin - PullRequest
0 голосов
/ 16 января 2020

Я разрабатываю приложение Android, которое извлекает информацию P C из базы данных, загружает относительные изображения P C на сервер, а также возвращает URL-адрес P C изображения для отображения. Все работает как чудо, во всех трех частях я использую службу WCF, развернутую на удаленном сервере IIS.

Изображения хранятся в виртуальном каталоге сервера, поэтому вы можете скопировать URL-адрес и вставить его в браузер и изображение отображаются без проблем.

Поскольку я использую динамическое c представление изображений, я реализовал следующий метод для их создания:

private void DisplayAttechedIMages(List<string> list_images_url)
{
    for (int i = 0; i < list_images_url.Count; i++)
    {
        Image pic = new Image
        {
            HeightRequest = 250,
            WidthRequest = 150,
            Source = ImageSource.FromUri(new Uri(list_images_url[i])),
        };
    }
}

Это только В части, где я их создаю, теперь мне нужно добавить их в контейнер, я пытался использовать <Grid> внутри <ScrollView>, но результат не очень хороший, потому что визуализация приводит к низкой производительности (отставание, низкий отклик и плохое изменение размера).

Также я попытался <ViewCell> внутри <TableView>, но результаты почти одинаковые.

Эти результаты могут зависеть от устройства?

Так что же наилучший способ отображения изображения с помощью URL-адресов?

1 Ответ

0 голосов
/ 17 января 2020

но результат не очень хороший, потому что визуализация приводит к низкой производительности (отставание, низкий отклик и плохое изменение размера).

Что касается отставания и низкого отклика, этот кеш необходим для Изображение. И плохое изменение размера, есть свойство внутри Image:

Свойство Aspect определяет, как изображение будет масштабироваться, чтобы соответствовать области отображения:

  • Fill - Растягивает изображение, чтобы полностью и точно заполнить область отображения. Это может привести к искажению изображения.
  • AspectFill - обрезает изображение таким образом, чтобы оно заполняло область отображения, сохраняя при этом аспект (ie. Без искажений).
  • AspectFit - Letterboxes изображение (если требуется) так, чтобы все изображение помещалось в область отображения, с пустым пространством, добавленным сверху / снизу или по бокам, в зависимости от того, является ли изображение широким или высоким.

Вы можете выбрать тот, который соответствует вашим лучшим пожеланиям. Вот формы c о отображении изображений .

Здесь я буду рекомендовать вам FFImageLoading Nuget Packaget, чтобы попробовать, он оптимизирует изображение URL с использованием кэша.

var cachedImage = new CachedImage() {
    HorizontalOptions = LayoutOptions.Center,
    VerticalOptions = LayoutOptions.Center,
    WidthRequest = 300,
    HeightRequest = 300,
    CacheDuration = TimeSpan.FromDays(30),
    DownsampleToViewSize = true,
    RetryCount = 0,
    RetryDelay = 250,
    BitmapOptimizations = false,
    LoadingPlaceholder = "loading.png",
    ErrorPlaceholder = "error.png",
    Source = "http://loremflickr.com/600/600/nature?filename=simple.jpg"
};

Вы можете обратиться к его официальному образцу , чтобы попробовать.

...