Rounded rectangle что это за программа на андроид
Довольно часто при разработке мобильных приложений требуется придавать содержимому некую форму, например, сделать круглое изображение для аватарки. Если для статичных элементов (ImageView) можно обойтись таким инструментом как Picasso transformation, то для динамического содержимого дела обстоят сложнее. Например, есть список элементов, который можно прокручивать и нужно закруглить края. Для этого вполне может подойти виджет CardView.
Но что если нужно задать форму отличную от прямоугольника, и при этом эта форма будет динамически меняться? Это и потребовалось сделать в одном из наших проектов. Подходящих стандартных компонентов UI для данных целей не нашлось, что сподвигло меня на исследование, какие вообще есть инструменты Android для придания формы контенту.
Статья длинная — для тех, кому лень читать всё, самое важное и исходный код в конце статьи.
В нашей компании работают довольно креативные дизайнеры. Их безумные идеи порой могут озадачить даже самого опытного разработчика. Посмотрим, что на этот раз нам приготовили.
У нас есть некая карточка с содержимым, которое может прокручиваться. У карточки есть закругление верхних углов, нижние углы должны быть прямыми. Карточку можно потянуть вверх, и, когда карточка заполняет весь экран, закругление убирается.
Все просто, на первый взгляд.
На первый взгляд, можно использовать виджет CardView, но в процессе разработки был выявлен ряд недостатков:
- нельзя задать радиус для каждого угла отдельно;
- “честное” закругление работает только на версиях, начиная с Android Lollipop. До этой версии добавляется отступ содержимого на размер радиуса углов. Это заметно при прокрутке, появляются пробелы между краями карточки;
- при установке нулевого радиуса приложение, запущенное на устройстве с версией ниже Andrid Lollipop, падает. В документации такие случаи просто не описаны.
Итак, стандартный виджет нам не подходит. Придется искать подходящее решение и писать инструмент самостоятельно. А для начала разобраться, какие есть возможности в этом направлении у других Android инструментов.
Критерии для реализации инструмента:
- возможность использовать в версиях Android до Lollipop и после. В крайнем случае комбинировать подходы;
- возможность задавать любую форму. Например, с помощью класса Path;
- наличие плавных линий и возможности сглаживания (antialiasing);
- и конечно же, производительность. Придание формы содержимому должно происходить с минимальным воздействием на производительность устройства, особенно для динамически меняющегося содержимого и формы.
Это, конечно, был бы универсальный инструмент. В вариантах, которые я исследовал, не все критерии соблюдаются, но для реализации части случаев вполне подходят.
Я попробовал 4 различных варианта:
- Свойство View.clipToOutline
- Метод Canvas.clipPath() при отрисовке дочерних элементов в контейнере
- Метод Canvas.drawPath() при отрисовке дочерних элементов в контейнере. Настройки PorterDuff.Mode + View.LAYER_TYPE_SOFTWARE
- Метод Canvas.drawPath() при отрисовке дочерних элементов в контейнере. Настройки PorterDuff.Mode + View.LAYER_TYPE_HARDWARE
Этот подход используется в виджете CardView. Глянем, что он умеет.
Как это работает:
Задаем фоновое изображение нужной формы и выставляем в поле View.clipToOutline значение “true”.
Но мы знаем, что работаем с API Android, и слишком легко, чтобы быть правдой. Смотрим документацию метода View.setClipToOutline()
Sets whether the View’s Outline should be used to clip the contents of the View…Note that this flag will only be respected if the View’s Outline returns true from Outline.canClip()
Всего-то достаточно, чтобы Outline.canClip() возвращал true . Смотрим документацию и для этого метода:
Returns whether the outline can be used to clip a View. Currently, only Outlines that can be represented as a rectangle, circle, or round rect support clipping.
Получается, что пока доступен ограниченный набор форм. Вот так, задумка хорошая, но возможности не позволяют реализовать весь полет фантазий.
Для того, чтобы динамически менять форму фонового изображения, можно создать класс, наследованный от Drawable. В методе getOutline() задаем нужный контур.
Преимущества
- Хорошая производительность;
- Сглаживание линий.
Недостатки
- Работает только на Lollipop и выше;
- Ограничение форм: прямоугольник, овал и прямоугольник со скругленными краями.
Хорошо подходит для ситуации, когда нужно задать форму прямоугольника, овала и прямоугольника со скругленными краями, при условии, что приложение разрабатывается для версий Android Lollipop и выше. Возможно, в будущем появится поддержка любой формы контура, но это в будущем.
Данный подход состоит в наследовании от класса контейнера. В методе dispatchDraw() делаем обрезку по нужной форме с помощью метода Canvas.clipPath()
Все что нужно — это задать необходимый контур с помощью объекта класса Path . Недочеты видны после запуска приложения - отсутствует сглаживание линий (antialiasing), а как его добавить - непонятно.
Преимущества
- Работает на версиях до/после Lollipop;
- Хорошая производительность.
Недостатки
Подход относительно прост в реализации и подойдет для случаев, когда требуется быстро добавить в проект необходимую функциональность, а сглаживание линий непринципиально.
Этот подход также требует наследования от контейнера. В методе dispatchDraw() делаем обрезку по нужной форме с помощью метода Canvas.drawPath() , в который передаем контур и объект класса Paint с инициализацией свойства xfermode .
Объект PorterDuffXfermode(PorterDuff.Mode.CLEAR) позволяет вырезать нужную область на экране, используя режим наложения одного изображения на другое. Зачем тогда вызов setLayerType(View.LAYER_TYPE_SOFTWARE, null) ? Дело в том, что этот режим некорректно работает в других типах Layer. В ином случае за обрезанной фигурой будет белый фон, а нам нужен прозрачный.
Подробнее про PorterDuff в документации.
Соответственно, данная настройка ведет к падению производительности. Но насколько это критично, видно на графике производительности.
В процессе тестирования выяснилось, что перестают работать такие вещи как тень у кнопки. Похоже, проблема именно в View.LAYER_TYPE_SOFTWARE.
Преимущества
- Работает на версиях до/после Lollipop;
- Гладкие, плавные линии.
Недостатки
- Плохая производительность;
- Не отображается тень на кнопках. Похоже, проблема именно в View.LAYER_TYPE_SOFTWARE;
- Работают не все виды PorterDuff.Mode.
Ключевым моментом, как и в предыдущем подходе, является переопределение метода dispatchDraw() , в котором используем метод canvas.drawPath() для обрезки. Для корректной работы PorterDuffXfermode при настройке View.LAYER_TYPE_HARDWARE нужно дописать дополнительную логику с объектом Canvas в методе dispatchDraw() .За подсказку спасибо Ilya Nekrasov
Как это выглядит в реализации:
Плюсы
- Работает на версиях до/после Lollipop;
- Хорошая производительность;
- Гладкие, плавные линии.
Минусы
- Иногда происходит мерцание, если в контейнере два View и у каждого меняется Alpha, т.е. один объект появляется, другой исчезает. При этом объект, который исчезает, может на доли секунды появляться при 100% Alpha. Мерцание не замечено в версии Android до Lollipop.
Для решения проблемы с закруглением углов в нашем проекте мы использовали данный метод. Избавились от мерцания при переходе между экранами, создав для каждого экрана свой контейнер. Это сказалось на производительности при смене экранов, но не критично и практически незаметно, так как переход занимает менее секунды.
Схематично было так:
После изменения
Данный подход может быть применен для большинства задач. Учитывая, что в объекте Path можно задать любую форму, это дает практически безграничные возможности. Радует и относительно хорошая производительность. Но из-за дополнительных манипуляций с объектом Canvas , могут возникать побочные эффекты, как это произошло у нас.
Получив достаточно информации по методам отсечения в Android, хочется проверить, как это работает с изменяемой формой в виде анимации. За основу анимации взял следующее: трансформация звезды в многоугольник и обратно в звезду. Все это вращается вокруг своего центра. Посмотрим, что получилось и как это влияет на производительность.
Метод PorterDuff.Mode + View.LAYER_TYPE_HARDWARE
Метод Canvas.clipPath()
Каждый из подходов хорошо применим в определенной ситуации.
Больше всего мне понравился подход со свойством View.clipToOutline , так как не нужно делать наследование от классов и он прост в реализации, а возможность задавать форму с помощью объекта Drawable упрощает задание контура для обрезки. Хотелось бы надеяться, что в будущем расширятся возможности для задания формы с помощью View.clipToOutline .
Интересный подход с методом Canvas.clipPath() . Минимум кода для реализации, менее “прихотлив” к версии Android, можно задавать любую форму. Если бы можно было добавить Antialiasing, то это было бы практически идеальным решением.
Что не советовал бы использовать, так это метод с View.LAYER_TYPE_SOFTWARE PorterDuffXfermode - сплошные минусы.
И как более универсальное средство — это реализация с помощью View.LAYER_TYPE_HARDWARE и PorterDuffXfermode . Данное решение работает на всех версиях Android, довольно хорошая производительность, можно задать любую форму контура, но нужно помнить об предостережениях, описанных выше.
В целом, результат исследования меня не особо обрадовал. Может быть я слишком требователен. 😀 Да, мы нашли способ сделать то, что было задумано, но хотелось бы более простого решения, так как наследование не самый лучший вариант. И к тому же нужен более удобный в использовании метод, как в случае с View.clipToOutline . Возможно, в будущем Android API этим нас обрадует. Ну или, может, это проще сделать в Flutter и пора переходить на него?🙂
Ух, это была довольно большая статья. Кто дочитал, тому виртуальный приз 🍬
Ссылка на исходный код. Тестовое устройство: Xiaomi Redmi 4x
Помимо двух рассмотренных приложений, придать вашему экрану индивидуальности может еще одна программа – Rounded Corner.
Дешевая 3070 Gigabyte Gaming - успей пока не началосьРабота приложения
При первом запуске Rounded Corner нам необходимо разрешить приложению отображаться поверх других окон и предоставить доступ к обработке нашей информации. Само приложение не русифицировано, все на английском языке; надеюсь, новички справятся с активацией программы.
После этого мы попадаем в меню с настройками, где предлагается выбрать следующие опции:
- Отображение закруглений поверх статус-бара;
- Отображение закруглений на панели с навигационными клавишами (при их наличии);
- Выбор эффекта краев.
реклама
Если с первыми двумя опциями вопросов не возникает и возникать не может, то что за эффекты предлагают нам разработчики Rounded Corner? Тут все очень интересно.
Помимо уже привычного нам скругления дисплея, можно выбрать различные рисунки по краям экрана, рамки, формы и даже эффекты самого экрана.
Выглядит необычно и при хорошем сочетании с чехлом или другим аксессуаром обеспечивает классный симбиоз.
Кроме того, можно выбрать размер скруглений или рамок и их дополнительные параметры. Но помните, что не все это бесплатно, и поскольку труд разработчика должен оплачиваться, то в данном случае программисты установили себе неплохой уровень оплаты.
Тестирование
Как бы это странно не звучало, но и с Rounded Corner у меня не возникло никаких проблем. Скорее всего, программы данного класса настолько просты, что нареканий к ним быть не может.
реклама
Rounded Corner потребляет наибольшее количество ресурсов среди всех протестированных приложений. Правда, и это отнюдь не много: до 50 Мбайт ОЗУ и около 42 Мбайт встроенной памяти (с учетом дополнительных пользовательских данных). О нагрузке на процессор или повышении расхода батареи вряд ли стоит рассказывать – ресурсоемкость и энергозатратность утилиты не более 1% от общего количества.
Выводы
Rounded Corner – довольно непростая программа для изменения углов дисплея мобильного устройства. Помимо скругления экрана, она предлагает различные рамки, эффекты экрана и прочие плюшки. Работает все хорошо, но за дополнительные преимущества придется доплатить.
реклама
Сводное сравнение приложений
Подведение итогов
Вот и завершился наш небольшой обзор популярных утилит для скругления дисплеев на android-устройствах. Да, приложения очень специфические и подойдут не всем, но и среди них можно выявить фаворита. Для данного теста были отобраны три наиболее интересные и функциональные программы: Cornerfly, Roundr и Rounded Corner (Easy4u).
И поскольку эдакий отборочный тур, осуществленный мной при подготовке к обзору, уже прошел, то все три программы пригодны к работе и максимально хорошо выполняют поставленную задачу. Лучшей же стала Rounded Corner (Easy4u). Она предлагает то же самое, что и конкуренты, но ее возможности шире за счет дополнительных рамок, эффектов и параметров по настройке. Выбор очевиден.
Rounded Corner
версия: 1.22
Последнее обновление программы в шапке: 14.01.2021
Краткое описание:
Закругленные уголки экрана
Google перевод
Rounded Corner добавляет закругленные уголки на экран.
Это приложение предлагает множество настроек, которые позволяют регулировать радиус угла в угле, цвет и другое.
Больше стилей уголков будут добавлены в ближайшее время.
Разрешения
• Интернет - используется для рекламы
• Система наложения - используется для отрисовки поверх приложений
• Billing - используется для в приложение биллинга продуктов
Просто скачайте Rounded Corner и создайте новый образ экрана!
Для Samsung устройства: Добавить в Smart Manager>Батарея>Rounded Corner в исключения во избежания выгрузки.
Для Oppo устройства: Для того, чтобы предотвратить приложение купировались самостоятельно:
Центр безопасности> Аккумулятор> Активировать функцию Smart энергосберегающий режим> ЭНЕРГОСБЕРЕГАЮЩИЙ контроль приложений и управление> Добавление приложений> проверено Округлые Corner
Для Xiaomi смартфона: необходимо вручную предоставить «поверх других приложений» разрешения (Перейти к Настройка> Установленные приложения> Rounded Corner> Диспетчер Разрешение> Дисплей всплывающее окно> «Разрешить» )
Для Huawei смартфон: Open Phone Manager приложения (или настройки приложения) -> Разрешение диспетчера -> выберите вкладку Приложения -> выберите Rounded Corner -> включить поверх других приложений
Покупая новый смартфон на Android, пользователь зачастую сталкивается с огромным множеством непонятных ему приложений, предустановленных производителем. Зачем они нужны? Нужны ли они вообще? Можно ли их удалить и не повлияет ли это на работу смартфона?
Как удалить приложение на Android?
Прежде чем мы перейдем к сути вопроса, вспомним, как удалять приложения на Android-смартфоне. На некоторых смартфонах достаточно нажать пальцем на иконку приложения и подержать пару секунд. В появившемся меню выбрать пункт Удалить или Отключить:
Но, в большинстве случаев, для удаления приложения необходимо зайти в Настройки смартфона, там выбрать пункт Приложения. После выбора нужного приложения, открываем его и нажимаем Удалить (или Выключить). В зависимости от марки смартфона, все может выглядеть немного по-другому, но, принцип тот же:
Список приложений, которые следует сразу удалить
Сегодня мы рассмотрим наиболее часто встречающиеся предустановленные приложения, которые можно смело удалять со своего новенького смартфона, не только освободив дополнительную память, но и увеличив тем самым время работы смартфона (так как лишние приложения могут работать в фоне и тратить заряд аккумулятора впустую).
Итак, проверьте, не встречаются ли у вас приложения из нашего списка:
Диск
Защищенная папка
Приложение от Samsung, позволяющее скрывать различные файлы или даже приложения от посторонних людей. Достать что-либо из этой папки можно только по паролю\отпечатку пальца. Если вы не работаете на спец.службы, с этим приложением можно расстаться.
Google Карты
Словарь
Briefing
Duo
Этому приложению можно смело дать звание самого бесполезного приложения от Google. Конечно, сама идея (осуществление видео-звонков) отличная, вот только никто этим приложением не пользуется, так как есть гораздо более популярные аналоги: Skype, Viber, WhatsApp или Facebook Messanger. Смело удаляйте!
Wear
Gmail
Google Фото
Google Музыка
Очень удобное приложение для прослушивания музыки. Проблема состоит лишь в том, что нужно оплачивать его ежемесячную подписку. А если вы не слушаете музыку по подписке, смысла в этом приложении нет никакого, ведь для прослушивания своих mp3 есть множество более удобных и функциональных аналогов.
Google Фильмы
Если предыдущее приложение для музыки еще имеет смысл оставить (и очень многие, включая меня, им пользуются), тогда это приложение можно смело удалять. Если, конечно, вы не против платить за просмотр одного фильма по $10-$20 (или брать его напрокат за $1), да еще без перевода (многие фильмы идут только с оригинальной дорожкой).
OneDrive
PowerPoint
Когда в последний раз вы создавали или просматривали на своем смартфоне PowerPoint-презентацию? Смело удаляйте это приложение, если оно было установлено на вашем смартфоне из магазина.
Smart Switch
Что бы еще удалить?
Здесь мы не говорили о таких простых приложениях, как Блокнот или Музыкальный проигрыватель. По названию приложения уже понятно, что его можно удалить без каких-либо последствий, если оно вас не устраивает.
- Блокнот
- Заметки
- Здоровье
- Зеркало
- Компас
- Погода
- Сканер
- Советы
- Центр игр
- Android Accessibility Suite (важно для людей с ограниченными возможностями)
- Facebook App Installer
- Facebook App Manager
- Facebook Services (эти 3 приложения можно удалить, если не используете Facebook)
- HiCare (техподдержка смартфонов Huawei)
- Huawei Device (приложение на Huawei, которое является просто ссылкой на сайт компании)
- Phone Clone (перенос всех данных со старого смартфона на новый, аналог Smart Switch от Samsung)
- Samsung Internet, Mi Браузер и другие браузеры (всё это аналоги Google Chrome, а потому есть смысл оставить только одно приложения для выхода в интернет)
Но даже если вы удалите только перечисленные выше приложения, сможете уже освободить достаточно много места на смартфоне, а также продлить время его работы от одной зарядки!
Кто бы что ни говорил, но Google Play – это помойка. Не даром её признали самым популярным источником вредоносного софта для Android. Просто пользователи в большинстве своём доверяют официальном магазину приложений Google и скачивают оттуда любое ПО без разбору. А какой ещё у них есть выбор? Ведь их всегда учили, что скачивать APK из интернета куда опаснее. В общем, это действительно так. Но остерегаться опасных приложений в Google Play нужно всегда. По крайней мере, постфактум.
Есть как минимум 8 приложений, которые нужно удалить
Google добавила в Google Play функцию разгона загрузки приложений
Вредоносные приложения для Android
Нашли вирус? Удалите его
В основном это приложения, которые потенциально высоко востребованы пользователями. Среди них есть скины для клавиатуры, фоторедакторы, приложения для создания рингтонов и др.:
- com.studio.keypaper2021
- com.pip.editor.camera
- org.my.famorites.up.keypaper
- com.super.color.hairdryer
- com.celab3.app.photo.editor
- com.hit.camera.pip
- com.daynight.keyboard.wallpaper
- com.super.star.ringtones
Это названия пакетов приложений, то есть что-то вроде их идентификаторов. Поскольку всё это вредоносные приложения, их создатели знают, что их будут искать и бороться с ними. Поэтому они вполне могут быть готовы к тому, чтобы менять пользовательские названия приложений, которые видим мы с вами. Но это мы не можем этого отследить. Поэтому куда надёжнее с этой точки зрения отслеживать именно идентификаторы и удалять вредоносный софт по ним.
Как найти вирус на Android
Но ведь, скажете вы, на смартфоны софт устанавливается с пользовательскими названиями. Да, это так. Поэтому вам понадобится небольшая утилита, которая позволит вам эффективно выявить весь шлаковый софт, который вы себе установили, определив название их пакетов.
- Скачайте приложение для чтения пакетов Package Name Viewer;
- Запустите его и дайте те привилегии, которые запросит приложение;
В красном квадрате приведен пример названия пакета
- Поочерёдно вбивайте в поиск названия пакетов, приведённые выше;
- При обнаружении приложений с такими именами, нажимайте на них и удаляйте.
Package Name Viewer удобен тем, что позволяет не просто найти нужное приложение по названию его пакета, но и при необходимости перейти в настройки для его удаления. Для этого достаточно просто нажать на иконку приложения, как вы попадёте в соответствующий раздел системы, где сможете остановить, отключить, удалить накопленные данные, отозвать привилегии или просто стереть нежелательную программу.
Как отменить подписку на Андроиде
Лучше всего приложение именно удалить. Это наиболее действенный способ защитить себя от его активности. Однако не исключено, что оно могло подписать вас на платные абонементы, поэтому для начала проверьте свою карту на предмет неизвестных списаний, а потом просмотрите список действующих подписок в Google Play:
- Запустите Google Play и нажмите на иконку своего профиля;
- В открывшемся окне выберите раздел «Платежи и подписки»;
- Здесь выберите «Подписки» и проверьте, нет ли среди них неизвестных;
- Если есть, просто нажмите напротив неё на кнопку «Отменить».
Свободное общение и обсуждение материалов
Можно ли танцевать под рэп? Достаточно послушать новый альбом Sfera EbbastaBluetooth-устройства окружают нас повсюду: колонки, умные часы и фитнес-браслеты, наушники. Из-за этого мы совсем не отключаем функцию на смартфоне, оставляя ее постоянно активной. Устройства делятся данными между собой, загружая какую-то часть в приложения. В то же время Bluetooth-соединение очень уязвимо и может стать причиной взлома. Что делать и как обезопасить себя и свои устройства от потери данных?
Когда Google представила новую на тот момент функцию безопасности для Android, это вызвало не поддельный интерес. Теперь компания привнесла эту - одну из лучших функций конфиденциальности Android 11 - на каждый телефон, который компания все еще активно поддерживает, и сделала она это с помощью волшебных инструментов Google Play. Поэтому вскоре каждый Android-телефон последних лет сможет автоматически отзывать системные разрешения, если вы не использовали приложение какое-то время. Так можно добиться того, чтобы сторонние приложения, которые вы скачивали ради одного-двух использований, но забыли удалить, не могли полностью пользоваться вашим устройством. Самое приятное в данной ситуации то, что поддерживать ее будет подавляющее большинство современных устройств.
“пользователи в большинстве своём доверяют официальном магазину приложений Google и скачивают оттуда любое ПО без разбору”, зачем судить по себе? Никто так не делает и вообще откуда этот дикий список того, что надо удалить?
Читайте также: