1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/HarmonyOS-tpc-glide

Клонировать/Скачать
changelog.md 5.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 03.12.2024 01:46 46bc8b8

1. Добавление возможности работы с GIF

(1) module.gif_decoder fixed StandardGifDecoder.java

Считывает данные кадра из источника изображения GIF и декодирует их в отдельные кадры для целей анимации. Данные изображения можно считывать либо из источника Inputstream, либо из byte[].

(2) module:library create path: com.bumptech.glide=>load=>resource=>gif

Наша цель на данном этапе — проанализировать и показать.

  • Создание системы анализа GIF.

    • Исправлено: все файлы в папке GIF.
    • Glide.java: добавлена поддержка реестра BUCKET_GIF.
    • RequestManager.java: добавлен метод asGif().
    • На данный момент мы можем получить кадр GIF.
  • Создайте определяемое пользователем изображение, а затем поддержите отрисовку элемента.

    • module:library создать путь: com.bumptech.glide => resource => gif => drawableability.
    • Создать RootShapeElement.java поддержку обратного вызова.
    • Создайте DraweeView.java, поддерживающий отрисовку холста элементом.

Общий процесс выглядит следующим образом:

  1. «Glide.with(this).asGif().load(resId).into(draweeview)» — после успешной загрузки «DrawableImageViewTarget.java» присваивает значение «Elemet» целевому «Image». (DraweeView).

    • Установите «animatable», выполните «animatable.onstart()», чтобы войти в «GifDrawable.onStart()», начните получать «Frame» первого кадра, и «GifFrameLoader» запустит цикл. Обратный вызов второго кадра — «GifDrawable.onFrameReady()».
  2. «GifDrawable» вызывает «invalidateSelf» после метода «onFrameReady», а затем ищет элемент управления, который зарегистрировал «Callback», чтобы выполнить метод «invalidateDrawable».

    • «DrawableView» запускает «drawToCanvas» после «invalidatedrawable».
    • Для поддержки ScaleType создайте пустой PixelMap, а GifDrawable используется для рисования содержимого GIF. Наконец, DraweeView выполняет преобразование и отображает конечный эффект.

2. Добавьте возможность нарезки и управления жизненным циклом для Glide

Поскольку загрузка GIF требует больших затрат ресурсов, необходимо правильно организовать загрузку GIF. Поэтому добавлены управление нарезкой и управление жизненным циклом. При использовании «Glide.with(Ability или AbilitySlice)» получаем ILifeCyle и отслеживаем его жизненный цикл. Когда ILifeCycle переходит в состояние BACKGround, мы активно останавливаем работу GIF и запускаем работу GIF, когда ILifeCycle переходит в состояние INACTIVE.

Конкретная задача — использовать RequestManagerFragment для привязки ActivityFragmentLifeCycle. Затем RequestManagerFragment получает жизненный цикл ActivitySlice и следит за ним.

3. Как загрузить GIF с помощью Glide

a. Загрузить GIF из сети

java
DraweeView image = (DraweeView) findComponentById(ResourceTable.Id_image);
Glide.with(this)
 .asGif()
 .load("https://img.blog.csdnimg.cn/2019120901303086.gif);
 .into(image);

b. Загрузить GIF из локального файла

java
DraweeView image = (DraweeView) findComponentById(ResourceTable.Id_drawview);
Glide.with(this)
 .asGif()
 .load(ResourceTable.Media_happygirl);
 .into(draweeView);  

Важно!

  1. В настоящее время для использования GIF необходимо использовать DraweeView.
  2. Если используется контекст с длительным жизненным циклом Glide, например applicationContext, вызовите метод stopGif класса DraweeView, когда страница с GIF закончится, чтобы остановить Glide и предотвратить ненужное использование ресурсов.
  3. Если вы хотите использовать функцию работы с GIF в Glide, то нативные изображения не поддерживают эту функцию, поскольку Image и Element независимы и не могут быть перерисованы с использованием Element. Чтобы поддерживать GIF, вам необходимо настроить Image. Подробнее см. в реализации DraweeView.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/HarmonyOS-tpc-glide.git
git@api.gitlife.ru:oschina-mirror/HarmonyOS-tpc-glide.git
oschina-mirror
HarmonyOS-tpc-glide
HarmonyOS-tpc-glide
master