Xamarin: загрузка изображений асин в поле зрения - PullRequest
0 голосов
/ 08 июня 2018

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

Проблема в том, что при запуске приложения я вижу, что оно немного запаздывает.(Изображения загружаются в поле зрения) И мне это не нравится.Это выглядит не очень хорошо.Итак, я начал новую задачу, в которой я получаю изображения из встроенных ресурсов.Но это не так много времени.Длительная вещь состоит в том, чтобы отобразить изображения в представлении.И я не могу сделать это в задаче, потому что это должен быть поток STA для доступа к представлению.

Я хочу это так:

Приложение запускается. Вы видите индикатор работающей активности.изображения загружаются из ресурса без блокировки потока пользовательского интерфейса. Изображения загружаются в представление без блокировки потока пользовательского интерфейса. Индикатор активности исчезает, и перед ним появляется основная сетка

So here is my code:

. Проверьте этот pastebin для кода.,

Спасибо.

Хорошо, я не решил проблему, но у меня есть решение:

Task.Factory.StartNew(() =>
        {
            return InitializeImages();
        }).ContinueWith(r =>
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                if (r.Result == GlobalSettings.ImageCount)
                    ButtonsGrid.ColumnDefinitions[1].Width = 0;
                else
                    ButtonsGrid.ColumnDefinitions[1].Width = GridLength.Star;

                for (int i = 0; i < r.Result; i++)
                {
                    ImagesGrid.Children.Add(_previewImages[i]);
                    ImagesStackLayout.Children.Add(_images[i]);
                }
            });

            Thread.Sleep(2000);

            Device.BeginInvokeOnMainThread(async () =>
            {
                await ShowWallpaperInPreview();

                await Loading(false);
            });
        });

Я позволил ей отставать на заднем плане.и через короткое время я переключаюсь с загрузки на обычный вид.Таким образом, он отстает на заднем плане (кого это волнует =)

1 Ответ

0 голосов
/ 08 июня 2018

Очень хорошим кандидатом для того, чтобы ваше приложение отвечало требованиям и охватывало случаи, не упомянутые в вашем вопросе, является проект с открытым исходным кодом, который называется FFImageLoading .Вот список поддерживаемых функций:

  • Настраиваемое кэширование диска и памяти
  • Несколько представлений изображения с использованием одного и того же источника изображения (URL, путь, ресурс) будут использовать только один битовый массив, которыйкэшируется в памяти (меньше использования памяти)
  • Поддержка ошибок и загрузки заполнителей
  • Изображения могут быть автоматически уменьшены до указанного размера (меньше используется память)
  • Можно повторить загрузку изображений (RetryCount, RetryDelay)

и многое другое!

Проверьте документацию Advanced Usage и Wiki для получения более подробной информации.

...