Pull to refresh
12
0
Юрий @kb2fty7

Android Developer

Send message

VectorDrawable — часть первая

Reading time7 min
Views16K

Предлагаю вашему вниманию перевод статьи "VectorDrawables – Part 1" с сайта blog.stylingandroid.com.


По долгу службы потребовалось мне как-то разобраться с векторной графикой. Во время поиска наткнулся я на серию статей под названием “VectorDrawable” в блоге https://blog.stylingandroid.com/. Ответов на все интересующие меня вопросы я, конечно, не нашел, но статьи очень понравились своей последовательностью и четко выверенным объемом необходимого материала. Решил поделиться переводом этих статей с обитателями хабра.


Я не переводил названия, activity, bitmap и тому подобное, потому что считаю, что так легче воспринимать информацию, ведь разработчики, в силу профессии, эти слова в русском варианте практически никогда не у потребляют. Далее следует перевод:

Читать дальше →

VectorDrawable — часть вторая

Reading time5 min
Views11K

В предыдущей статье мы рассмотрели, как преобразовать существующий svg-файл в VectorDrawable, который позволяет заменить много растровых изображений на одно, меньшее по размеру и более простое в обслуживании. Однако, это не все полезности, которые можно извлечь из VectorDrawable. Его можно анимировать. Это мы и рассмотрим в данной статье, заставив логотип андроид пожимать плечами.

Читать дальше →

Бутстрэппинг — бизнес с нуля. Часть 1

Reading time5 min
Views26K

В данной серии статей я расскажу о нашем опыте поднятия бизнеса только своими силами с полного нуля до оборота 350 тыс. евро в год, или, как еще называют такое явление, — бутстрэппинг.
Читать дальше →

Mastering Android NDK

Reading time1 min
Views8.5K
В конце прошлого года вышла наша вторая книга про нативную разработку под Android с использованием Android NDK и C++ (про первую уже было рассказано на Хабре).

image

www.packtpub.com/application-development/mastering-android-ndk

Читать дальше →

Пол Грэм: Пару слов о находчивости (A Word to the Resourceful)

Reading time3 min
Views14K
image

Всем рунетом мы закончили перевод книги «Хакеры и художники», теперь сконцентрируем усилия на переводе всех эссе Пола Грэма.

Январь 2012.
Оригинал — A Word to the Resourceful
За перевод спасибо finik

Год назад я заметил следующую закономерность в неудачных стартапах, которые мы финансируем: с их основателями трудно вести диалог. Такое чувство, будто между нами стена. Никогда бы не сказал этого, если бы они понимали, что я им говорил.

Это явление привлекло мое внимание, поскольку раньше мы отметили закономерность среди наиболее успешных стартапов, и поначалу казалось, что она другого рода. Мы финансировали стартапы и лучше работали те, об учредителях которых мы могли бы сказать: «они в состоянии позаботиться о себе сами». Лучшие стартапы подобны самонаводящейся ракете, в том смысле, что вам всего лишь надо дать им направление, и они последуют туда, независимо от того, что это за направление. Например, когда они получают деньги, вы можете начать вникать в дело, в то же время, отдавая себе отчёт, что вы можете совсем не думать об этом деле на этом этапе. Вам не нужно нянчиться с ними, чтобы быть уверенными в результате. Это тип учредителей, которые возвращаются к вам с деньгами; единственный вопрос: сколько и на каких условиях.

Казалось странным, что успешных и неудачников можно было выявить несвязанными тестами. Следовало ожидать, что основатели успешных стартапов с одной стороны обладали выдающимся качеством Х, а неудачники с другой стороны полным отсутствием качества Х. Была ли какая-то инверсия между изобретательностью и даром красноречия?
Читать дальше →

FlexboxLayout — часть 1

Reading time4 min
Views25K

В мае 2016 года в официальном репозитории Google на Github появился новый проект — flexbox-layout. Это менеджер макетов под Андроид, который предоставляет функциональность, схожую с CSS flexible box. В этой серии статей мы посмотрим на FlexboxLayout и попытаемся понять, как он работает, и как его лучше использовать.


Мы рассмотрим влияние XML-атрибутов на макет и поведение вложенных представлений. Чтобы было проще разбираться, я опубликовал приложение в Google Play, которое позволяет поэкспериментировать с различными вариантами. Со временем я выложу исходный код этого приложения, а пока предлагаю скачать его и поиграться с настройками.


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

Читать дальше →

FlexboxLayout — часть 2

Reading time2 min
Views9K

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


В предыдущей статье мы увидели, что у FlexboxLayout есть ряд атрибутов, которые управляют размером и расположением дочерних элементов, но это еще не все. Все менеджеры макетов в Андроиде применяют к дочерним элементам собственные параметры макета (LayoutParams), которые предоставляют этим вложенным элементам специфичные атрибуты. FlexboxLayout в этом плане не исключение. Более того, именно в дочерних атрибутах раскрывается вся мощь этого макета.


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

Читать дальше →

Custom layouts. Part 2. CellLayout

Reading time10 min
Views23K
И снова здравствуйте, коллеги.

И снова я пожаловал к вам с топиком кастомной разметки. На этот раз, я задумал сделать некую “ячейчатую” разметку.
Смысл прост: вся площадь контейнера делится на сетку из квадратных ячеек одинакового размера, и каждый потомок может занять произвольные клетки на этой сетке. Используя подобную разметку можно составлять красивую мозаику из кнопок или картинок, не прибегая к многочисленным вложенным layout’ам. И, поскольку, это специально заточенный для этих целей layout, он будет работать очень шустро.


Читать дальше →

Custom layout. Выплывающая панель + параллаксный скроллинг

Reading time7 min
Views19K
Привет, коллеги.

Сегодня я хотел рассказать, как можно создать нестандартный менеджер разметки (layout manager) и вдохнуть в него жизнь при помощи анимаций.
Нам в DataArt часто требуется реализовывать нестандартные компоненты для приложений заказчика, поэтому у меня накопился определенный опыт в этом деле, которым решил поделиться.
В качестве примера решил реализовать аналог часто встречающейся в социальных сетях выплывающей снизу панели. Обычно этот прием используется при необходимости показать контент, например, фото, и добавить возможность комментировать на дополнительной панельке, которую пользователь может вытянуть снизу. При этом основной контент обычно тоже уплывает наверх, но немного медленнее, чем основная панель. Это называется «параллаксный скроллинг».
Специально для этой статьи я решил с нуля реализовать подобный компонент. Сразу хочу заметить, что это не полноценный, стабильный и готовый для продакшен код, а всего лишь демонстрация, написанная за пару часов, чтобы показать основные приемы.

Читать дальше →

Tasks и Back Stack в Android

Reading time5 min
Views83K
Привет. Из названия темы вы могли заметить, что речь пойдет о том, как устроены Tasks и Back Stack в Android. Эта статья будет являться свободным переводом официального источника. Тема больше ориентирована на новичков, но я думаю, что и опытный разработчик сможет узнать что-то новое, т.к. тема специфична и не часто приходится кастомизировать поведение наших Activity.
Читать дальше →

Защита Android приложений от взлома

Reading time5 min
Views49K
В данной статье мы кратко расскажем о том, как можно защитить свою программу от взлома, не интегрируя стандартное решение от Google и предоставим пример рабочего кода. Интересно? Просим под кат!

Читать дальше →

Ускорение криптоопераций или опыт портирования под Android

Reading time9 min
Views12K
В состав платформы Android входит фреймворк Bouncycastle, предназначенный для выполнения криптоопераций, например, шифрования или проверки цифровой подписи. Отличительной чертой данного фреймворка является то, что он целиком написан на Java, без применения нативного кода. Это увеличивает его переносимость, однако значительно уменьшает быстродействие. В первом приближении реализация криптофункций с помощью нативного кода может дать значительный прирост производительности. Это может существенно увеличить быстродействие приложения, использующего криптографию. Посмотрим, подтвердится ли это предположение.
Данным постом я хочу начать серию статей о создании модуля, выполняющего криптооперации на примере шифрования/расшифровки симметричным алгоритмом AES. Для начала необходимо понять, какой прирост производительности может дать применение нативного кода по сравнению со встроенной в ОС реализацией.
Читать дальше →

Общение между потоками через ResultReceiver

Reading time4 min
Views19K
Как известно каждому Android-разработчику Android SDK, предоставляет несколько способов заставить опреденный кусок кода выполнятся в параллельном потоке. Многопоточность это хорошо, но кроме ее организации нужно также наладить канал общения между потоками. Например, между UI-потоком и потоком, в котором выполняются фоновые задачи. В данном коротком эссе хочу осветить один из способов, основанный на применении встроенного класса ResultReceiver.
Читать дальше →

Получение изображения нужного размера без OutOfMemoryError + автоповорот согласно EXIF orientation

Reading time10 min
Views22K
Многие уже наверняка сталкивались с проблемой OutOfMemoryError и находили достаточно толковый мануал Displaying Bitmaps Efficiently. Но если вы еще не успели изобрести свой велосипед на основе мануала, предлагаю свое готовое решение с объяснениями, которое умеет получать изображения:

  • В формате Bitmap и byte[]
  • Уменьшенное с сохранением пропорций
  • Уменьшенное с вырезанием (crop) до заданного размера width x height
  • Оптимизированное для 2g
  • Всегда в правильной ориентации (учитывая EXIF orientation)


Пример использования
ImageManager im = new ImageManager(ctx, 100, 100);
Bitmap bm = im.setIsScale(true)
              .setIsResize(true)
              .setIsCrop(true)
              .getFromFile(myUri.toString());



Далее: OutOfMemoryError и решение

Коммуникация между Activity и Service

Reading time4 min
Views14K
Как-то возникла у меня задача передавать данные из сервиса в активити. Начались поиски решения в стандартном SDK, но так как времени не было, то сваял плохое решение в виде использования базы данных. Но вопрос был открыт и спустя некоторое время я разобрался с более верным способом, который есть в SDK — использование классов Message, Handler, Messenger.
Читать дальше →

Видео последовательность в Drawable

Reading time5 min
Views5K
После поста о подходе Apple к кодированию видео в JPEG, решил рассказать о своем подобном «велосипеде» под Android.

В своем мобильном проекте решили мы сделать превьюшки оружия не статической картинкой, а видео. Подразумевалось, что художники нарисуют красивые анимации, может даже в 3д, но что-то не сложилось и нам выдали простейшие зацикленные 1-1.5 секундные ролики в разрешении 256х256. В iOS версию они встроились замечательно, а вот в Android пришлось повоевать с MediaPlayer и SurfaceView, но все-равно получились некоторые «корявости» — содержимое SurfaceView не перемещалось вслед за родительским View, была заметная пауза при воспроизведении, и пр.

Разумным решением было бы разбить анимации на кадры и оформить в xml для AnimationDrawable, но для 15 видов оружия это значило бы мусорку из 5000+ кадров по 10-15 кб каждый. Потому была сделана своя реализация AnimationDrawable, работающая с sprite sheet и относительно быстрый метод конверсии видео в такой формат.
Читать дальше →

Командный паттерн вызова удаленных процедур (RPC) в Android

Reading time15 min
Views7.6K

Предисловие



Недавно я начал свое знакомство с платформой Android. На определенном этапе необходимо было проверить, как тут обстоят дела с удаленным вызовом процедур или, проще говоря, клиент-серверным взаимодействием.

Поначалу была надежда, что платформа позволит использовать технологию EJB. После некоторых поисков в Интернете, я убедился, что это не так просто. Большинство источников рекомендовало использовать вебсервисы как альтернативу, т.к. EJB слишком тяжеловесна для Android. Для вебсервисов же рекомендовался фреймворк ksoap2-android.

Понатыкавшись на различные грабли при первоначальном изучении ksoap2, я дошел до этапа, когда необходимо было послать и получить с сервера объект своего кастомного типа. Воспользовавшись поиском нашел вот эту статью. Оттуда почерпнул, что каждый кастомный объект должен реализовать интерфейс KvmSerializable. Это же подразумевало, что мы должны реализовать методы для сериализации и десериализации объекта. Поскольку в теории предполагалось использовать больше сотни собственных объектов, идея писать реализацию KvmSerializable для каждого из них как-то не вызывала у меня энтузиазма.
Читать дальше →

Сокет-клиент в сервисе и обновление UI через BroadcastReceiver

Reading time5 min
Views12K
Задача:
Сделать клиент-приложение «на сокетах», так чтобы при закрытии главного активити работа продолжалась и соединение не терялось.

Решение:
Это возможно сделать с помощью сервисов в андроиде, о том что такое сервис и как он работает написано много статей, по этому я не буду вдаваться в подробности и приступлю к реализации.

Наше приложение состоит из 3 самых главных классов это:
  • MainActivity — активити в котором будем видеть отображение работы нашего сокет-клиента
  • ServiceExchange — собственно сам сервис
  • SocketAsync — наш асинхронный сокет-клиент

Читать дальше →

Пишем игру для Android c помощью AndEngine. Часть 4

Reading time7 min
Views11K
Привет всем!

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

Часть 1.
Часть 2.
Часть 3.

Интересно?
Читать дальше →

Android: Вращаем на все четыре стороны AndEngine

Reading time3 min
Views7.7K
Однажды мне пришлось решать задачу — запускать четыре разные игры написанные на andengine в зависимости от ориентации экрана. Обычные положения — landscape и portrait вопросов не вызывали. Вопросы возникли для остальных положений — противоположных для указанных. Четыре варианта переворота устройства. Пришлось обратиться к работе с сенсорами. Указанный ниже подход применим не только к AndEngine, но и к обычным Activity.
Читать дальше...

Information

Rating
Does not participate
Date of birth
Registered
Activity