Как стать автором
Обновить
3
0
Сергей @First_Spectr

Программист

Отправить сообщение

Получаем результат правильно (Часть 1). Activity Result API

Время на прочтение7 мин
Количество просмотров54K

Каждый Android-разработчик сталкивался с необходимостью передать данные из одной Activity в другую. Эта тривиальная задача зачастую вынуждает нас писать не самый элегантный код. 

Наконец, в 2020 году Google представила решение старой проблемы — Activity Result API. Это мощный инструмент для обмена данными между активностями и запроса runtime permissions. 

В данной статье мы разберёмся, как использовать новый API и какими преимуществами он обладает.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии5

На SDK надейся и сам не плошай: Проблема вложенных скроллов в BottomSheetBehavior

Время на прочтение11 мин
Количество просмотров10K

Наверное, каждый, любуясь красивыми и магически плавно съезжающими в разные стороны окошками, тулбарами и остальными вьюхами, задумывался как это работает, наверное, даже что-то читал про CoordianatorLayout, про различные Behaivor, которые позволяют создавать буквально волшебство на андроидовских вьюхах. Конечно, можно писать кастомные вьюхи, с нужным поведением, которое может быть ограничено только твоим воображением или твоими знаниями в Android разработке. Но помимо этого, есть ещё одно ограничение — время, не будешь же ты писать кастомную вьюху на хакатоне, в горящем по срокам проекте, а написанные заранее решения с кастомными вьюхами могут быть освоены не за самый короткий срок членами команды. Именно тогда приходит самое простое и самое логичное решение проблемы — не выпендриваться, использовать стандартные инструменты Android, там же смышлённые ребята сидят, всё будет в шоколаде (ну или в других сладостях андроида).


Но не всё так просто, тут и начинается моё близкое знакомство с магией таких ребят, как CoordinatorLayout, BottomSheetBehavior, а точнее с багом, который выпустили из виду разработчики, когда их писали. В статье будет описан процесс выявления бага, связанного с вложенной прокруткой внутри view-компонентов с поведением BottomSheetBehavior, а также способы его решения.

Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии6

Книга «React и Redux: функциональная веб-разработка»

Время на прочтение15 мин
Количество просмотров28K
image Привет, Хаброжители! В декабре мы издали книгу Алекса Бэнкса и Евы Порселло, цель которой — научить писать эффективные пользовательские интерфейсы при помощи React и систематизация новых технологий, позволяющая сразу же приступить к работе с React. Чтение книги не предполагает никаких предварительных знаний React. Все основы библиотеки будут представлены с самого начала. Сейчас мы рассмотрим раздел «Управление состоянием React»

До сих пор свойства использовались только для обработки данных в компонентах React. Свойства имеют неизменяемый характер. После отображения свойства компонента не изменяются. Чтобы изменить пользовательский интерфейс, понадобится другой механизм, способный заново отобразить дерево компонента с новыми свойствами. Состояние React является его неотъемлемой частью, предназначенной для управления данными, которые будут изменяться внутри компонента. Когда состояние приложения меняется, пользовательский интерфейс отображается заново, чтобы отразить эти нововведения.
Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии10

Работа с ConstraintLayout через XML-разметку

Время на прочтение22 мин
Количество просмотров122K

ConstraintLayout


Привет! Меня зовут Гавриил, я Android-лид Touch Instinct.


В марте Google выкатил релизное обновление ConstraintLayout. Презентовали его еще на прошлом Google I/O. С того момента прошел почти год, ConstraintLayout стал лучше, быстрее и оброс новыми возможностями. Например, приятно, что появилась возможность объединения элементов в цепи — это позволяет использовать ConstraintLayout вместо LinearLayout.


О всех новых и старых возможностях ConstraintLayout я и постараюсь рассказать в этой статье. Предупрежу сразу — статья будет длинная и других семи частей не будет. Про визуальный редактор ConstraintLayout в статье не будет ни слова — только XML-разметка (по старинке) и немного кода.

Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии6

Android Academy. Вы все пропустили! Но это не точно…

Время на прочтение3 мин
Количество просмотров8.3K

В октябре мы стартовали курс Android Academy Fundamentals, на который зарегистрировалось более 1500 слушателей. Основные занятия уже прошли, но на десерт осталось три вебинара. Присоединяйтесь! Будет интересно, даже если вы не были на лекциях и не делали домашки.

Хотите освежить свои знания Андроида, или познакомиться с мобильной разработкой поближе? Заходите под кат, мы расскажем, с чего начать!

Заглянуть в нору кролика
Всего голосов 13: ↑12 и ↓1+11
Комментарии4

[ libGDX ] Пишем полноценную игру под Android. Часть 1

Время на прочтение8 мин
Количество просмотров115K
Здравствуйте! Я решил попробовать себя на поприще game-dev'а и заодно рассказать и показать как это было. Вторая часть здесь.

Игра представляет собой экран, на котором расположены созвездия. Каждая звезда этого созвездия имеет свой цвет (нота). Например, ноту «До» обычно представляют красным цветом, а «Ми» — желтым. Вот что получится в итоге:

image

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

Писать будем, используя фреймворк libGDX. Мне он больше всех понравился, как новичку в этом деле. Да и информации по нему я нашел больше. Итак, приступим.
Читать дальше →
Всего голосов 44: ↑38 и ↓6+32
Комментарии20

Перехватываем всё с помощью CoordinatorLayout Behavior

Время на прочтение8 мин
Количество просмотров46K
Предлагаю вашему вниманию перевод статьи Ian Lake Intercepting everything with CoordinatorLayout Behaviors.

Вы не продвинетесь далеко в изучении Android Design Support Library, не столкнувшись с CoordinatorLayout. Множество View из Design Library требуют CoordinatorLayout. Но почему? Сам по себе CoordinatorLayout делает не так уж и много, если использовать его с View, входящими в состав Android фреймворка, то он будет работать, как обычный FrameLayout. Так откуда берётся вся его магия? Вот где на сцену выходит CoordinatorLayout.Behavior. Подключив Behavior к дочерней View у CoordinatorLayout, вы сможете перехватывать касания, оконные вставки (window insets), изменения размеров и макета (measurement и layout), а также вложенную прокрутку. Design Library широко использует Behavior чтобы добавить силу большинству функционалу, которую вы видите.


Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии0

Translucent на андроид и adjustResize

Время на прочтение2 мин
Количество просмотров5.6K


Возможность использовать translucent в андроид появилась ещё в KITKAT. И выглядит в правильном дизайне это довольно эффектно. А с появлением моды на девайсы с "Чёлками", кажется, просто необходимой вещью в любом тёплом ламповом стартапчике.


Давайте представим ситуацию: вы запилили офигительно красивый, скроллящийся под StatusBar и NavigationBar дизайн. И вот вы добавляете поле ввода и понимаете, что adjustResize у вас не работает.


Вы можете:


  1. Забить, – пользователь сам закроет клавиатуру, чтобы посмотреть что под ней.
  2. Отказаться от translucent, стиль – это не ваше, всё будет олдово, надёжно, как у всех.
  3. Как только пользователь начинает скроллить, скрывать клавиатуру. Вы молодец! Всё правильно сделали, skype даже под ios так делает! А там и прозрачности-то нет.
  4. Вынести все поля ввода на отдельные экраны. Как бонус — каждый лишний переход на экран, минус удобство и конверсия.
  5. Запилить свой adjustResize.
Запилить свой adjustResize
Всего голосов 7: ↑7 и ↓0+7
Комментарии8

Masking Bitmaps на Android

Время на прочтение12 мин
Количество просмотров20K


Введение


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

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

Я предполагаю, что читатель имеет опыт в разработке под Android и знаком с классами Canvas, Drawable и Bitmap.

Код, используемый в статье, можно найти на GitHub.
Читать дальше →
Всего голосов 48: ↑47 и ↓1+46
Комментарии7

RecyclerView.ItemDecoration: используем по максимуму

Время на прочтение10 мин
Количество просмотров35K
Привет, дорогой читатель Хабра. Меня зовут Олег Жило, последние 4 года я Android-разработчик в Surf. За это время я поучаствовал в разного рода крутых проектах, но и с легаси-кодом поработать довелось.

У этих проектов есть как минимум одна общая деталь: везде при разработке приложения использовался список с элементами. Например, список контактов телефонной книги или список настроек вашего профиля.

В наших проектах для списков используется RecyclerView. Я не буду рассказывать, как писать Adapter для RecyclerView или как правильно обновлять данные в списке. В своей статье расскажу о другом важном и часто игнорируемом компоненте — RecyclerView.ItemDecoration, покажу как его применить при вёрстке списка и на что он способен.


Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии11

Справочник по синхронизаторам java.util.concurrent.*

Время на прочтение14 мин
Количество просмотров269K
Целью данной публикации не является полный анализ синхронизаторов из пакета java.util.concurrent. Пишу её, прежде всего, как справочник, который облегчит вхождение в тему и покажет возможности практического применения классов для синхронизации потоков (далее поток = thread).

В java.util.concurrent много различных классов, которые по функционалу можно поделить на группы: Concurrent Collections, Executors, Atomics и т.д. Одной из этих групп будет Synchronizers (синхронизаторы).



Синхронизаторы – вспомогательные утилиты для синхронизации потоков, которые дают возможность разработчику регулировать и/или ограничивать работу потоков и предоставляют более высокий уровень абстракции, чем основные примитивы языка (мониторы).
Читать дальше
Всего голосов 45: ↑41 и ↓4+37
Комментарии15

Android Remote Debugger — удаленная отладка Android приложений

Время на прочтение5 мин
Количество просмотров12K

Отладка является важным этапом разработки программного обеспечения. Поиск и исправление ошибок позволяют разрабатывать качественные продукты.


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


  • logcat – инструмент для просмотра логов приложения, в том числе и исключений при краше. Его можно использовать как в Android Studio, так и в терминале, через adb;
  • Android profiler – мощный инструмент, который позволяет просматривать все сетевые запросы, загрузку процессора, памяти и батареи.

Также существует множество сторонних решений, позволяющих просматривать сетевой трафик, базы данных, shared preferences и др.
У всех этих инструментов есть преимущества и недостатки. К их минусам можно отнести следующее:


  • множество зависимостей различных инструментов;
  • сложность использования – как правило, все инструменты ориентированы на разработчиков и неудобны другим участникам команды, например, тестировщикам, аналитикам или back-end разработчикам. Обычно последним приходится дергать android-разработчиков, чтобы просмотреть какие-либо логи;
  • обязательное подключение телефона к компьютеру, например, через usb-кабель.

На данный момент я не нашел ни одного решения, которое объединяло бы различные инструменты отладки и устраняло бы вышеуказанные проблемы. Поэтому я разработал собственное решение.


Android Remote Debugger


Мое решение является очень простым в использовании, так как позволяет отлаживать приложение прямо в браузере, без подключения Android устройства к компьютеру. Данное решение включает в себя четыре раздела для отладки:


  • Logging — просмотр логов приложения, включая краши;
  • Database — просмотр и редактирование записей в базе данных;
  • Network — просмотр всех сетевых запросов и ответов в удобном формате;
  • SharedPreferences – просмотр и редактирование данных SharedPreferences.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии4

Цифровое представление аналогового аудиосигнала. Краткий ликбез

Время на прочтение7 мин
Количество просмотров51K


Дорогие читатели, меня зовут Феликс Арутюнян. Я студент, профессиональный скрипач. В этой статье хочу поделиться с Вами отрывком из моей презентации, которую я представил в университете музыки и театра Граца по предмету прикладная акустика.

Рассмотрим теоретические аспекты преобразования аналогового (аудио) сигнала в цифровой.
Статья не будет всеохватывающей, но в тексте будут гиперссылки для дальнейшего изучения темы.

Чем отличается цифровой аудиосигнал от аналогового?


Аналоговый (или континуальный) сигнал описывается непрерывной функцией времени, т.е. имеет
Всего голосов 41: ↑41 и ↓0+41
Комментарии52

Дополняя SQL. Часть 2. Оптимизация работы со строками и открытия файлов

Время на прочтение8 мин
Количество просмотров2.7K
Публикую на Хабр оригинал статьи, перевод которой размещен в блоге Codingsight.

Что будет в этой статье?


Это вторая статья в цикле о жизни разработчиков IDE для баз данных. Ее структура будет похожа на первую. Как и в первой я расскажу о проблемах с которыми мы сталкивались, решениях успешных и не очень. Для понимания этой статьи не обязательно читать первую часть полностью, но первые несколько параграфов были бы полезны, для погружения в контекст.

Для ленивых основные тезисы первой статьи:

  • Мы делаем линейку IDE для СУБД MySQL, SQL Server, Oracle, PostgreSQL
  • Это настольное приложение на .NET стеке со всеми вытекающими
  • Много функций завязаны на анализ SQL кода. Используем для этого сильно доработанный ANTLR

По мере публикации буду добавлять ссылки на следующие части:

Часть 1. Сложности парсинга. Истории о доработке ANTLR напильником
Часть 2. Оптимизация работы со строками и открытия файлов
Часть 3. Жизнь расширений для Visual Studio. Работа с IO. Необычное использование SQL
Часть 4. Работа с исключениями, влияние данных на процесс разработки. Использование ML.NET

В этой части я сосредоточусь на проблемах при работе со строками. Одно из самых критичных мест при работе со строками для нас — это стадия лексического анализа текста, когда скрипт разбивается на слова.


Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии0

Руководство по FFmpeg libav

Время на прочтение24 мин
Количество просмотров85K

Долго искал книгу, в которой было бы разжёвано, как использовать FFmpeg-подобную библиотеку, известную как libav (название расшифровывается как library audio video). Обнаружил учебник «Как написать видеоплеер и уложиться в менее чем тысячу строк». К сожалению, информация там устаревшая, так что пришлось создавать мануал своими силами.

Большая часть кода будет на C, однако не волнуйтесь: Вы легко всё поймёте и сможете применить на любимом языке. У FFmpeg libav уйма привязок ко многим языкам (в том числе и к Python и к Go). Но даже если Ваш язык прямой совместимости не имеет, всё равно можно привязаться через ffi (вот пример с Lua).

Начнём с краткого экскурса о том, что такое видео, аудио, кодеки и контейнеры. Затем перейдем к ускоренному курсу, посвященному использованию командной строки FFmpeg, и, наконец, напишем код. Не стесняйтесь переходить сразу в раздел «Тернистый путь изучения FFmpeg libav».

Есть мнение (и не только моё), что потоковое интернет-видео уже приняло эстафету от традиционного телевидения. Как бы то ни было, FFmpeg libav точно достоин изучения.

Оглавление


Читать дальше →
Всего голосов 65: ↑65 и ↓0+65
Комментарии13

Подробно о задачах Gradle

Время на прочтение24 мин
Количество просмотров121K


Перевод второй главы свободно распространяемой книги Building and Testing with Gradle

Задача (task) является основным компонентом процесса сборки в файле билда Gradle. Задачи представляют собой именованные наборы инструкций билда, которые Gradle запускает выполняя сборку приложения. При сравнении с другими билд-системами, задачи могут показаться знакомой абстракцией. Однако Gradle предоставляет более развитую модель, в отличие от той, которая вам уже может быть знакома. По сравнению с традиционными возможностями объявления операций билда, связанных зависимостями, задачи Gradle являются полнофункциональными объектами, которыми вы при желании можете управлять программно.

Рассмотрим какими способами можно определить задачу, два ключевых подхода к определению задач и программный интерфейс, который мы можем использовать для гибкой настройки.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии4

Инструкция по публикации Android-приложения в Google Play

Время на прочтение12 мин
Количество просмотров381K
Вслед за инструкцией по публикации приложения в App Store выкладываем внутренний свод правил Лайв Тайпинг по публикации приложений в Google Play, составленный отделом менеджеров при активном участии тимлида отдела Android-разработки Александра Мирко. Вне зависимости от того, насколько ты крутой и опытный проджект-менеджер, всегда есть шанс забыть что-нибудь. Эта инструкция призвана облегчить вам жизнь.

Итак, что нужно сделать PM`y в ходе публикации:

  1. Создать аккаунт в Google Play Developer Console для заказчика, если у заказчика такового нет, или предложить произвести публикацию с нашего аккаунта.
  2. Оформить privacy policy.
  3. Подготовить маркетинговые материалы (иконка, скриншоты, APK, баннер, текст, проморолик).
  4. Обеспечить сборку наличием сертификата цифровой подписи.
  5. Настроить оплату за пользование приложения.
  6. Отправить сборку в Google Play.

Все подробности — под катом.

UPD от 25.04.2017: добавлены разделы про альфа- и бета-тестирование и поэтапное внедрение, дополнены разделы «Обеспечение сборки наличием цифровой подписи» и «Технические требования к apk-файлу», сделано замечание про ASO и внесены косметические правки.


Читать дальше →
Всего голосов 19: ↑14 и ↓5+9
Комментарии15

Push уведомления в Android с помощью Firebase Cloud Messaging для начинающих

Время на прочтение2 мин
Количество просмотров136K
Не так давно Google купили Firebase и теперь на странице с описанием GCM нас встречает радостная новость о том, что пора бы мигрировать на Firebase.
...GCM users are strongly recommended to upgrade to FCM, in order to benefit from new FCM features today and in the future.

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

Нам понадобится:

  • Android Studio
  • Код демо-проекта с github
  • 20 минут свободного времени
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии18

Комфортная работа с Android Studio

Время на прочтение16 мин
Количество просмотров112K


Всем доброго времени суток!


Насколько производительно работает Android Studio? Считаете ли Вы, что она работает шустро на Вашем ПК или Mac? Или, иногда, сталкиваетесь с лагами или долгой сборкой? А на крупных проектах?


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


Пользователи других популярных IDE, возможно, тоже могут найти для себя кое что полезное.

Читать дальше →
Всего голосов 26: ↑17 и ↓9+8
Комментарии25

Дорожная карта Android-разработчика в 2019 году

Время на прочтение7 мин
Количество просмотров30K

Всем привет! У нас отличные новости. В этом месяце в Отус стартует базовый курс "Android-разработчик", а также "Специализация Android-разработчик", которая включает в себя целый пакет курсов. В связи с этим делимся с вами полезной статьей, перевод которой приурочен к данным запускам.



2019 год – самое время, чтобы стать Android-разработчиком. Беря во внимание те инновации и тот прогресс, который сейчас происходит в сфере Android-разработки, можно сказать, что сейчас самое время стать частью этого движения. Последние достижения в Kotlin, Android Things и иных технологиях, делают Android приоритетным направлением развития для новичка, давая возможность получать актуальную информацию и двигаться вперед в определенном направлении.


Я решил написать это руководство после того, как подумал о том, что в 2017 году я сам проходил такой же путь. Надеюсь, оно поможет вам стать таким Android-разработчиком, каким вы хотите быть.
Начнем с самых основ.

Читать дальше →
Всего голосов 25: ↑20 и ↓5+15
Комментарии19

Информация

В рейтинге
Не участвует
Откуда
Великий Новгород (Новгород), Новгородская обл., Россия
Дата рождения
Зарегистрирован
Активность