графика

Используйте графические возможности в нескольких версиях платформы Android.

В этой таблице перечислены все артефакты в группе androidx.graphics .

Артефакт Стабильный выпуск Релиз-кандидат Бета-версия Альфа-релиз
графическое ядро 1.0.0 - - -
графический путь 1.0.1 - - -
графические фигуры - 1.0.0-rc01 - -
Последнее обновление этой библиотеки: 24 июля 2024 г.

Объявление зависимостей

Чтобы добавить зависимость от Graphics, необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .

Добавьте зависимости для нужных вам артефактов в файл build.gradle для вашего приложения или модуля:

классный

dependencies {
    implementation "androidx.graphics:graphics-core:1.0.0"
    implementation "androidx.graphics:graphics-path:1.0.1"
    implementation "androidx.graphics:graphics-shapes:1.0.0-rc01"
}

Котлин

dependencies {
    implementation("androidx.graphics:graphics-core:1.0.0")
    implementation("androidx.graphics:graphics-path:1.0.1")
    implementation("androidx.graphics:graphics-shapes:1.0.0-rc01")
}

Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .

Обратная связь

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

Создать новую задачу

Дополнительную информацию см. в документации по системе отслеживания проблем .

Для этого артефакта нет примечаний к выпуску.

Графические фигуры Версия 1.0

Версия 1.0.0-rc01

24 июля 2024 г.

androidx.graphics:graphics-shapes:1.0.0-rc01 , androidx.graphics:graphics-shapes-android:1.0.0-rc01 и androidx.graphics:graphics-shapes-desktop:1.0.0-rc01 выпущены. Версия 1.0.0-rc01 содержит эти коммиты .

Версия 1.0.0-бета01

1 мая 2024 г.

androidx.graphics:graphics-shapes:1.0.0-beta01 , androidx.graphics:graphics-shapes-android:1.0.0-beta01 и androidx.graphics:graphics-shapes-desktop:1.0.0-beta01 выпущены. Версия 1.0.0-beta01 содержит эти коммиты .

Изменения API

  • Разрешить предварительный поворот фигур, чтобы они начинались в другой точке. Это изменение позволяет фигурам pillStar начинать свои кривые с точки по периметру, отличной от стандартной. Это может быть полезно при анимации обводки контура фигуры, чтобы начать рисование с определенного места на контуре фигуры. ( Ifbb4d , b/324303807 )
  • В Morph добавлены функции calculateBounds() , которые работают параллельно с теми же функциями в RoundedPolygon . ( I8a3b6 , б/325463575 )

Версия 1.0.0-альфа05

7 февраля 2024 г.

androidx.graphics:graphics-shapes:1.0.0-alpha05 , androidx.graphics:graphics-shapes-android:1.0.0-alpha05 и androidx.graphics:graphics-shapes-desktop:1.0.0-alpha05 выпущены. Версия 1.0.0-alpha05 содержит эти коммиты.

Новые возможности

  • Библиотека теперь предлагает новые функции pill() и pillStar() для упрощения создания закругленных/звездчатых фигур. Существуют также новые API для расчета точных границ, необходимых для фигуры (предыдущие границы были просто оценкой, основанной на базовой опорной кривой Безье и контрольных точках), а также максимально возможных границ, которые могут быть полезны для определения размера. контейнера, в котором он находится, если он будет вращаться внутри этого контейнера. ( I71827 )

Изменения API

  • Теперь больше возможностей для получения точных и максимальных границ. ( I6d49f , б/317286450 )

Исправление ошибок

  • При рисовании этих фигур в виде обведенных контуров время от времени возникали артефакты рендеринга из-за проблемы рендеринга низкого уровня, связанной с кривыми нулевой длины. Эта ошибка была исправлена ​​путем исключения всех кривых нулевой длины (которые не нужны фигурам, что также позволило сэкономить на накладных расходах на пути, создаваемые фигурами).

Версия 1.0.0-альфа04

13 декабря 2023 г.

androidx.graphics:graphics-shapes:1.0.0-alpha04 , androidx.graphics:graphics-shapes-android:1.0.0-alpha04 и androidx.graphics:graphics-shapes-desktop:1.0.0-alpha04 выпущены. Версия 1.0.0-alpha04 содержит эти коммиты.

Новые возможности

  • Этот выпуск содержит несколько изменений API, а также исправления ошибок.
  • Многие изменения API делают библиотеку Shapes дружественной к KMP. Это упрощает вызов из кода, отличного от Android (например, кода Compose, не зависящего от Android). Например, в API нет типов Android, таких как предыдущие типы PointF, Matrix и Path.
  • Также было внесено несколько изменений в API и реализацию по соображениям производительности, в частности, чтобы минимизировать выделение (и сбор) объектов. Например, переход от PointF к отдельным параметрам Float позволяет избежать выделения множества временных структур PointF для хранения этих вершин.

Изменения API

  • Заменен Morph.asMutableCubics на функцию для перебора MutableCubics . Изменен функциональный интерфейс PointTransformer : теперь он принимает координаты x и y Point и возвращает TransformedResult (который создается с преобразованными координатами x и y) ( I6719e ).
  • Удален общедоступный конструктор Cubic и сделан его фабричной функцией. ( I409ce )
  • Добавление API-интерфейсов преобразования и рисования, специфичных для Android ( I079f6 , b/292289543 )
  • Устраните зависимости Android ( Iadc1c , b/292289543 )
  • Имена свойств привязки и элемента управления теперь стали более разумными ( If13bd , b/294562941 ).
  • Параметры PointF изменены на пары Float ( Id4705 , b/276466399 , b/290254314 )
  • progress теперь передается непосредственно командам рисования Morph ( Icdca2 )

Исправление ошибок

  • Исправлена ​​ошибка при создании больших фигур. ( I4fd66 , б/313497325 )

Версия 1.0.0-альфа03

7 июня 2023 г.

Выпущен androidx.graphics:graphics-shapes:1.0.0-alpha03 . Версия 1.0.0-alpha03 содержит эти коммиты.

Изменения API

  • Добавлена ​​новая функция RoundedPolygon.rectangle() ( I78e7e , b/280322189 ).
  • Функции Star и Circle теперь декапитализированы и вызываются через сопутствующий объект RoundedPolygon : например, RoundedPolygon.star(...) ( I14735 ).

Исправление ошибок

  • Исправлена ​​ошибка сглаживания ( Ibf894 ).
  • Исправлена ​​ошибка, возникавшая, когда начальная и конечная формы были одинаковыми. Лучше распределите свободное пространство по сторонам для разрезов, сначала используя свободное пространство для скругления, затем для сглаживания, если осталось место. ( Ibd320 , б/277936300 )

Версия 1.0.0-альфа02

19 апреля 2023 г.

Выпущен androidx.graphics:graphics-shapes:1.0.0-alpha02 . Версия 1.0.0-alpha02 содержит эти коммиты.

Изменения API

  • Суперкласс Polygon был объединен со своим подклассом RoundedPolygon ; все полигоны теперь являются [необязательно] закругленными.
  • Функция Star (которая, как и прежде, по-прежнему возвращает RoundedPolygon ) теперь принимает значение innerRadius вместо предыдущего параметра innerRadiusRatio . Он измеряется в тех же единицах измерения, что и существующий параметр радиуса, что упрощает работу и делает ее более последовательной. Кроме того, параметр numOuterVertices был переименован в numVerticesPerRadius чтобы уточнить, что одно и то же число применяется как к внутреннему, так и к внешнему радиусу.
  • Ранее сообщалось, что CornerRounding.radius относится к размеру многоугольника, но это было (и должно быть) абсолютное, а не относительное значение. Документы были обновлены, и исправлена ​​аннотация, ограничивающая максимальное значение 1,0.

Версия 1.0.0-альфа01

5 апреля 2023 г.

Graphics-Shapes — это новая библиотека, которая позволяет легко создавать и визуализировать закругленные многоугольные формы, а также выполнять простой и автоматический морфинг (анимацию) между различными фигурами.

Выпущен androidx.graphics:graphics-shapes:1.0.0-alpha01 . Эта версия выпущена из внутренней ветки.

Новые возможности

  • Используйте API Polygon для создания правильных и звездообразных многоугольников с нужным количеством вершин.
  • Используйте дополнительные параметры CornerRounding , чтобы указать радиус скругления и параметры сглаживания углов, в результате чего получаются многоугольные формы с закругленными углами.
  • Используйте новый API Morph(Polygon, Polygon) для автоматического расчета формы «морфинга», прогресс которой можно установить от 0 до 1 для анимации между начальной и конечной фигурами. Анимируйте этот прогресс во времени, рисуя результат в каждом кадре, чтобы создать плавную анимацию между этими новыми закругленными формами.

Графический путь версии 1.0

Версия 1.0.1

1 мая 2024 г.

Выпущен androidx.graphics:graphics-path:1.0.1 . Версия 1.0.1 содержит эти коммиты .

Исправление ошибок

  • Улучшения флагов компилятора.

Версия 1.0.0

6 марта 2024 г.

Выпущен androidx.graphics:graphics-path:1.0.0 .

Версия 1.0.0-rc01

21 февраля 2024 г.

androidx.graphics:graphics-path:1.0.0-rc01 выпущен. Версия 1.0.0-rc01 содержит эти коммиты.

Исправление ошибок

  • Улучшение производительности PathIterator на API <34 ( Id4629 )

Версия 1.0.0-бета02

10 января 2024 г.

Все изменения в этом выпуске сводились к уменьшению размера библиотеки, который был больше, чем необходимо, из-за допущений, сделанных собственным кодом.

Выпущен androidx.graphics:graphics-path:1.0.0-beta02 . Версия 1.0.0-beta02 содержит эти коммиты.

Исправление ошибок

  • Размер libandroidx.graphics.path.so уменьшен на 96%. ( I71397 )
  • Уменьшите размер libandroidx.graphics.path.so на 5%. ( I2da7c )
  • Уменьшены собственные компоненты androidx.graphics:graphics-path на 43%. ( I8e40d )

Версия 1.0.0-бета01

29 ноября 2023 г.

androidx.graphics:graphics-path:1.0.0-beta01 выпущен. Версия 1.0.0-beta01 содержит эти коммиты.

Изменения API

  • Удалено использование экспериментального API isAtLeastU() ( Ie9117 , b/289269026 ).

Исправление ошибок

  • Различные исправления и улучшения производительности, в том числе работа библиотеки с кониками.

Версия 1.0.0-альфа02

7 июня 2023 г.

Выпущен androidx.graphics:graphics-path:1.0.0-alpha02 . Эта версия разработана во внутренней ветке.

Новые возможности

  • Исправлена ​​проблема с внутренней проверкой версии платформы, которая вызывала проблемы при работе на предварительных версиях Android 14 (проверка версии завершалась неудачей, но механизм выполнения действий в предыдущих выпусках не работал правильно, в частности, на Android 14).

Версия 1.0.0-альфа01

22 марта 2023 г.

androidx.graphics:graphics-path:1.0.0-alpha01 выпущен. Версия 1.0.0-alpha01 содержит эти коммиты.

Новые возможности

  • Эта новая библиотека позволяет запрашивать данные Path через новый API PathIterator . Используя этот API, вызывающие объекты могут перебирать все сегменты объекта Path, чтобы определить операцию и данные для этих сегментов.
  • Библиотека использует аналогичные API, представленные в предварительной версии Android 14, но эта версия API для AndroidX также работает с версиями API 21.

Графическое ядро ​​версии 1.0

Версия 1.0.0

29 мая 2024 г.

Выпущен androidx.graphics:graphics-core:1.0.0 . Версия 1.0.0 содержит эти коммиты .

Основные особенности версии 1.0.0

  • Официальный стабильный выпуск библиотеки графического ядра. Включает незначительные исправления ошибок и улучшения производительности по сравнению с версией 1.0.0-rc01.

Версия 1.0.0-rc01

17 апреля 2024 г.

Выпущен androidx.graphics:graphics-core:1.0.0-rc01 . Эта версия разработана во внутренней ветке.

Исправление ошибок

  • Исправлена ​​проблема, приводившая к потенциальному двойному закрытию дескрипторов файлов с помощью CanvasBufferedRendererAPI на некоторых устройствах Android под управлением Android 14.
  • Исправлена ​​проблема, из-за которой FrameBuffer не удалял экземпляры фреймбуфера должным образом.

Версия 1.0.0-бета01

13 декабря 2023 г.

Выпущен androidx.graphics:graphics-core:1.0.0-beta01 . Версия 1.0.0-beta01 содержит эти коммиты.

Новые возможности

  • Представлен новый API LowLatencyCanvasView для поддержки рендеринга с низкой задержкой с помощью API 2D-графики Android (Canvas + Paint) в иерархии представлений.
  • Представлен API CanvasBufferedRenderer для поддержки аппаратного ускорения рендеринга Canvas в HardwareBuffer . Это можно использовать для рисования части пользовательского интерфейса в буфере, который можно преобразовать в растровое изображение с помощью API Bitmap.wrapHardwareBuffer .

Изменения API

  • Обновлен API CanvasBufferRenderer#releaseBuffer теперь он имеет дополнительный параметр ограничения. Обновлена ​​документация, описывающая, когда возвращается RenderResult#fence . ( Если1ea7 )
  • Добавьте метод draw в RenderRequest , чтобы поддерживать использование сопрограмм для планирования запросов на отрисовку. Предыдущий метод рисования, который использовал исполнителя, переименован в drawAsync . Метод isClosed() преобразован в свойство. ( I5bff6 )
  • Открытый параметр формата буфера для CanvasFrontBufferRenderer для непосредственного сопоставления с CanvasBufferedRenderer.Builder#setBufferFormat ( I0f272 ).
  • Создан API CanvasBufferedRenderer для обработки аппаратного ускорения рендеринга холста в HardwareBuffer . Это обеспечивает бэкпортированную реализацию для Android Q наряду с настройкой глубины цепочки подкачки HardwareBuffers . Конфигурация ColorSpace по-прежнему ограничена Android U+, однако реализация совместимости обеспечивает неактивное поведение со стороны разработчиков. ( I9b1d8 )
  • Добавьте API-интерфейсы setFrameRate / clearFrameRate в SurfaceControlCompat.Transaction , чтобы контролировать частоту кадров наряду со стратегией изменения для плавных переходов или переходов по умолчанию. ( I6045c )
  • Понижен требуемый уровень API для setDataSpace до Android Q с Android T. ( I59c34 )
  • Добавлен обратный вызов onBufferReleased в API GLFrameBufferRenderer , чтобы дать потребителям возможность очистить состояние, когда буфер больше не отображается ( I8a4e2 ).
  • Создайте LowLatencyCanvasView для поддержки простого варианта использования рендеринга контента с низкой задержкой, который синхронизируется с рендерингом иерархии представлений. Это смягчает сложности, связанные с управлением SurfaceView за счет внутреннего управления экземпляром SurfaceView , который транслируется с экрана на экран для синхронизированного рендеринга и рендеринга с малой задержкой соответственно. ( I9253b )
  • В API CanvasFrontBufferedRenderer добавлена ​​поддержка конфигурации цветового пространства. Обновлены многобуферные обратные вызовы, теперь они также включают SurfaceControl с обратной буферизацией ( I24bd9 ).

Версия 1.0.0-альфа05

6 сентября 2023 г.

Выпущен androidx.graphics:graphics-core:1.0.0-alpha05 . Версия 1.0.0-alpha05 содержит эти коммиты.

Новые возможности

  • Представлен API GLFrameBufferRenderer . Это обеспечивает комбинацию зависимостей OpenGL, конфигурации цепочки обмена, форматов пикселей и конфигурации SurfaceControl . ( Ic775b )

Изменения API

  • В различные API обратного вызова добавлены параметры ширины и высоты для размеров труб из SurfaceHolder#Callbacks . ( I7f9fc )
  • Добавлен прозрачный API для очистки переднего и мультибуферизованного слоев. ( Ic1f95 )
  • Добавлена ​​поддержка настройки базового типа буфера цепочек обмена, используемых в GLFrontBufferedRenderer . ( I07a13 )
  • Добавлены свойства Kotlin для геттеров в GLFrameBufferRenderer , аннотация IntRange для максимального количества записей в буфере и аннотации HardwareBufferFormart и HardwareBufferUsage для setFormat / setUsage соответственно. ( Ief89e )
  • Обновлен API setBuffer для транзакций SurfaceControl , чтобы обеспечить ограничение выпуска. ( Ice1bb )
  • Добавлены API-интерфейсы SurfaceControlCompat.Transaction для настройки пространства данных, а также установки расширенного диапазона яркости. ( Ic378d )

Версия 1.0.0-альфа04

7 июня 2023 г.

Выпущен androidx.graphics:graphics-core:1.0.0-alpha04 . Версия 1.0.0-alpha04 содержит эти коммиты.

Новые возможности

  • Представлен CanvasFrontBufferedRenderer для поддержки графики с низкой задержкой с использованием API android.graphics.Canvas наряду с существующей реализацией OpenGL.

Изменения API

  • Обновлен API SurfaceControlCompat.Transaction#setBuffer , позволяющий экземплярам HardwareBuffer с нулевым значением отражать соответствующий API платформы ( I173d7 ).
  • Вместо этого переименуйте методы, относящиеся к рендерингу с двойной буферизацией, в Multi Buffered, поскольку резервная цепочка буферов может содержать более двух буферов. ( I830d7 )
  • Создайте API CanvasFrontBufferedRenderer чтобы позволить 3ps использовать систему рендеринга с фронтальной буферизацией с помощью API Canvas. ( Ibfc29 )

Исправление ошибок

  • Исправлена ​​проблема, из-за которой GLFrontBufferedRenderer не отображал контент после возобновления соответствующего действия.
  • Исправлена ​​проблема, из-за которой содержимое передней буферизации очищалось преждевременно.
  • Исправлена ​​проблема, из-за которой SurfaceHolder.Callbacks не удалялись после выпуска графических API с низкой задержкой.

Версия 1.0.0-альфа03

22 марта 2023 г.

Выпущен androidx.graphics:graphics-core:1.0.0-alpha03 . Версия 1.0.0-alpha03 содержит эти коммиты.

Изменения API

  • Обновлена ​​реализация обратного вызова GLFrontBufferedRenderer , чтобы предоставить объект BufferInfo , который содержит ширину/высоту буфера вместе с идентификатором буфера кадра, который можно использовать для перенацеливания исходного места назначения после рендеринга в промежуточный рабочий буфер. ( I7fe20 )
  • Объединенное создание SyncFence для статического фабричного метода в SyncFenceCompat .
  • Удален общедоступный метод совместимости для eglDupNativeFenceFDANDROID в пользу фабричного метода SyncFenceCompat для создания SyncFence. Это необходимо для того, чтобы все поверхности API получали правильную реализацию SyncFence независимо от уровня API. ( I849bb )
  • Добавлена ​​документация для FrameBufferRenderer и SyncStrategy .
    • FrameBufferRenderer + FrameBuffer + FrameBufferPool перемещён в пакет androidx.graphics.opengl
    • SyncStrategy перенесен в пакет androidx.graphics.opengl .
    • Обновлена RenderCallback#onDraw
    • Обновлена ​​документация RenderCallback#obtainFrameBuffer , в которой за вызов FrameBuffer.close отвечает разработчик API.
    • Обновлен onDrawComplete чтобы указать, что потребители несут ответственность за отправку содержимого для отображения.
    • Интерфейсы/классы совместимости SyncFence перенесены в пакет androidx.hardware для отражения платформы.
    • API SyncFence переименован в SyncFenceV19 и стал закрытым для консолидации использования в SyncFenceCompat , который везде, где это возможно, использует API SyncFence платформы. ( I5149c )
  • Добавлены методы GLFrontBufferedRenderer#cancel и GLFrontBufferedRenderer#execute . Первое полезно в сценариях отклонения ладони, когда рендеринг в передний буфер следует отменить и скрыть передний буфер. Последнее полезно в сценариях манипулирования объектами в потоке GL без необходимости планировать рендеринг. ( Если0b7f )
  • Добавьте API для рендеринга непосредственно на слой с двойной буферизацией. Это способствует повторному рендерингу сцены после возобновления, а также дает потребителям возможность выборочно определять, когда динамически использовать рендеринг с фронтальной буферизацией в зависимости от желаемой сцены для рендеринга. ( Ied56c )
  • В SurfaceControlCompat.Builder добавлен новый API для поддержки настройки родительского SurfaceControl из другого экземпляра SurfaceControl в дополнение к существующему механизму из SurfaceView . ( I1d1b6 )
  • Больше обнуляемых типов возвращаемых устаревших скрытых функций ( Ibf7b0 )
  • Добавлена ​​константа расширения EGL_ANDROID_get_native_client_buffer для запроса, поддерживает ли устройство Android импорт экземпляров HardwareBuffer в объекты EGLClientBuffer , которые можно использовать как экземпляр EGLImage . ( Иад767 )
  • Добавление аннотации @JvmDefaultWithCompatibility ( I8f206 )

Версия 1.0.0-альфа02

9 ноября 2022 г.

Выпущен androidx.graphics:graphics-core:1.0.0-alpha02 . Версия 1.0.0-alpha02 содержит эти коммиты.

Изменения API

  • Исправлена ​​отсутствующая аннотация RequiresApi для addTransactionCommitListener , которая была представлена ​​в Android S ( I0a035 ).
  • Обновлены обратные вызовы onDraw<Front/Double> Buffer, чтобы предоставить матрицу преобразования, которую потребители могут передавать в свои вершинные шейдеры в дополнение к текущей ширине/высоте буфера. Потребители несут ответственность за использование этих параметров для правильной предварительной ротации кода рендеринга OpenGL. ( I82f9e )

Исправление ошибок

  • Уменьшена задержка графики за счет предварительного вращения буферов перед выполнением транзакций SurfaceControl .
  • Исправлена ​​проблема, из-за которой в журналах ошибок отображалась ошибка 300d (EGL_BAD_SURFACE).
  • Исправлена ​​проблема, из-за которой GLFrontBufferedRenderer становился недействительным после возобновления соответствующего действия, в котором он использовался.
  • Расширенная поддержка эмуляторов и устройств ChromeOS.
  • Исправлена ​​проблема, из-за которой передний буферный слой мог быть скрыт преждевременно.

Версия 1.0.0-альфа01

24 октября 2022 г.

Выпущен androidx.graphics:graphics-core:1.0.0-alpha01 . Версия 1.0.0-alpha01 содержит эти коммиты.

Новые возможности

  • Первоначальный выпуск библиотеки графического ядра AndroidX. Сюда входят API-интерфейсы для поддержки вариантов использования с низкой задержкой, таких как ввод с помощью стилуса. Здесь также представлены некоторые вспомогательные API для использования OpenGL.

Изменения API

  • Представляет GLFrontBufferedRenderer для помощи в фронтальном и многобуферном рендеринге для достижения низкой задержки и высокого качества рендеринга.
  • Представляет API-интерфейс GLRenderer для помощи в рендеринге OpenGL для различных поставщиков Surface, таких как SurfaceView , TextureView и других.