Динамическое размытие для Android Views, похожее на iOS. Включает библиотеку и небольшой пример проекта.
BlurView можно использовать как обычный FrameLayout. Он размывает свое подлежащее содержимое и рисует его как фон для своих дочерних элементов. Дочерние элементы BlurView не размываются. BlurView перерисовывает свое размытое содержимое при обнаружении изменений в иерархии представлений (вызов draw()). Он учитывает изменения своего положения и размера, включая анимацию представлений и анимацию свойств.
<eightbitlab.com.blurview.BlurView
android:id="@+id/blurView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:blurOverlayColor="@color/colorOverlay">
<!--Любой дочерний View здесь, например TabLayout. Этот View не будет размыт-->
</eightbitlab.com.blurview.BlurView>
float radius = 20f;
``` View decorView = getWindow().getDecorView();
// ViewGroup, с которого вы хотите начать размытие. Выберите корневой элемент как ближайший к BlurView в иерархии.
ViewGroup rootView = (ViewGroup) decorView.findViewById(android.R.id.content);
// Необязательно:
// Установите drawable для рисования в начале каждого размытого кадра.
// Может быть использовано в случае, если ваша разметка имеет много прозрачного пространства, и ваш контент
// получает слишком низкое значение прозрачности после применения размытия.
Drawable windowBackground = decorView.getBackground(); blurView.setupWith(rootView) // Необязательно передайте RenderEffectBlur или RenderScriptBlur как второй параметр
.setFrameClearDrawable(windowBackground) // Необязательно. Полезно, когда ваш корневой элемент имеет много прозрачного фона, что приводит к полупрозрачному размытому содержимому. Это сделает фон непрозрачным
.setBlurRadius(radius)
Всегда пытайтесь выбрать ближайший возможный корневой элемент разметки к BlurView. Это значительно уменьшит количество работы, необходимой для создания снимка иерархии представлений.
BlurView в настоящее время не поддерживает размытие этих элементов, так как они работают только с аппаратно-ускоренным Canvas, а BlurView полагается на программный Canvas для создания снимка представлений для размытия.
Так как JCenter закрывается, пожалуйста, используйте https://jitpack.io/ и теги выпуска в качестве источника стабильных артефактов.
implementation 'com.github.Dimezis:BlurView:version-2.0.6'
Возможно, установить округлённые углы без использования какого-либо специального API, алгоритм такой же, как и для других обычных View:
Создайте округлённый drawable и установите его в качестве фона.
Затем настройте выравнивание, чтобы BlurView не рисовал за пределами углов.
blurView.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
blurView.setClipToOutline(true);
Связанный тред - https://github.com/Dimezis/BlurView/issues/37## Почему размытие происходит на основном потоке?
Потому что размытие на других потоках введёт 1-2 кадра задержки.
К слову, RenderEffectBlur
выполняет размытие на потоке рендеринга.
Другие библиотеки:
Copyright 2024 Dmytro Saviuk
Лицензировано по лицензии Apache License, Version 2.0 («Лицензия»);
вы не можете использовать этот файл, если не будете соблюдать условия Лицензии.
Вы можете получить копию Лицензии по адресу [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) http://www.apache.org/licenses/LICENSE-2.0
Если не требуется по применимому закону или не согласовано письменно, программное обеспечение
распространяется по Лицензии на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ,
как явных, так и подразумеваемых.
См. Лицензию для конкретного языка, регулирующего права и условия распространения по Лицензии.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )