Как самому сделать живые обои для андроид
Перейти к содержимому

Как самому сделать живые обои для андроид

  • автор:

Сделайте Живые Обои под Android Используя GIF Анимацию.

Вы когда нибудь видели красивую GIF анимацию, которая повторяется беспрерывно, и хотели бы поставить такую в качестве живых обоев на ваше устройство, которое работает под Android? Что ж, вы можете это сделать, и в этом уроке, я покажу вам как.

Введение

Чтобы создавать интересные и красивый живые обои с нуля, используя только математику и код, который будет генерировать анимацию, возможно придется много и долго потрудиться. А так же нужно привлечь всю свою креативность. С другой стороны, создать анимированные GIF обои, или найти такие в сети — гораздо проще. В этом уроке, вы узнаете, как конвертировать любоую GIF анимацию в живые обои.

Необходимая первоначальная подготовка

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

Хотя можно сделать любую GIF анимацию, я рекомендую вам загрузить хороший синемаграф . Синемаграф — это не что иное, как GIF анимация, которая обычно делается из видео, и плавно зацикливается. Вы можете найти много вариантов на Flickr .

В этом уроке, я использую синемаграф, созданный пользователем Flickr — djandyw.com, так как он распространяется по лицензии Creative Commons.

1. Создайте Новый Проект

Запустите Android Studio, создайте новый проект, и дайте ему название GIFWallpaper. Дайте ему уникальное имя, если вы планируете разместить его на Google Play.

Сделайте Живые Обои под Android Используя GIF Анимацию.

Задайте для minimum SDK — API 8: Android 2.2 (Froyo).

Сделайте Живые Обои под Android Используя GIF Анимацию.

Нашему приложению не нужен статус Activity , поэтому выбираем Add No Activity и жмем Finish.

Сделайте Живые Обои под Android Используя GIF Анимацию.

2. Описание Обоев

Для живых обоев, нужен файл, который будет их описывать. Создайте новый XML файл res/xml/wallpaper.xml и замените его содержание следующим:

Значения имени (label) и иконки (thumbnail) важны, так как они будут показываться в списке обоев доступных на вашем устройстве.

3. Редактируем Манифес т

Для запуска живых обоев, нашему приложению необходимо прописать одно разрешение — android.permission.BIND_WALLPAPER .

Живые обои запускаются как объект Service , который может принимать значение android.service.wallpaper.WallpaperService в качестве intent action. Назовем Service GIFWallpaperService — и добавим его в манифест проекта — AndroidManifest.xml.

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

4. Добавляем GIF анимацию

Копируйте загруженную с Flickr GIF анимацию в папку проекта — assets. Я дал ему название girl.gif.

5. Создаем Сервис

Создадим новый Java класс и назовем его GIFWallpaperService.java. Он должен наследовать класс WallpaperService .

Поскольку WallpaperService — это абстрактный класс, вы должны переопределить метод onCreateEngine и вернуть экземпляр вашему Engine , который может отрисовать кадры для GIF.

Чтобы использовать анимированный GIF, вы должны сперва конвертировать его в объект Movie . Для этого вы можете использовать метод decodeStream класса Movie . После того как Movie создан, отправьте его как параметр в конструктор Engine .

Вот как должен выглядеть метод onCreateEngine :

6. Создаем Engine

Теперь давайте работать над Engine . Создайте класс GIFWallpaperEngine внутри класса GIFWallpaperService , который будет наследовать WallpaperService.Engine .

В этом классе добавим следующие поля:

  • frameDuration : целое число, указывающее длину задержки между перерисовкой анимации. Значение 20, дает нам 50 фреймов в секунду.
  • visible : логическая переменная, которая дает программе знать, когда именно обои видны на дисплее. Это важно, потому что нам не нужно отрисовывать обои, когда их не видно.
  • movie : это анимированный GIFв форме объекта Movie .
  • holder : это отсылка к объекту SurfaceHolder доступному в программе. Он будет инициирован с помощью описания метода onCreate .
  • handler : это объект Handler , который будет использоваться для запуска Runnable , который отвечает за отрисовку обоев.

Ваш класс должен выглядеть таким образом:

Теперь создадим метод под названием draw , который будет отрисовывать содержимое gif файла. Давайте распишем этот метод:

  • Сначала мы проверяем переменную visible на условие true . Если это так, то мы продолжаем.
  • Используем комманду SurfaceHolder»s из метода lockCanvas для создания холста — Canvas , на котором будет отрисовываться наша анимация.
  • Рисуем кадра GIF анимации на Canvas , после масштабирования и позиционирования.
  • После того, как отрисовка завершена, передаем Canvas назад в SurfaceHolder .
  • Обновляем текущий кадр GIF анимации, используя метод setTime объекта Movie .
  • Вызываем метод снова используя handler после ожидания frameDuration в миллисекундах.

Метод draw никогда не будет вызываться непосредственно. Он всегда вызывается через использование объектов Handler и Runnable . Поэтому, двайте создадим объект Runnable и назавем его drawGIF .

Добавьте в класс GIFWallpaperService следующий код:

Метод onVisibilityChanged автоматически вызывается, каждый раз когда будет меняться состояние обоев. Мы должны переписать его, что бы на основе значения аргумента visible , запускать или останавливать drawGIF . Метод removeCallbacks объекта Handler будет использоваться для остановки запущенных обоев drawGIF .

И наконец, пререпишем метод onDestroy для Engine , который будет останавливать запуск drawGIF , если обои деактивированы.

7. Скомпилируйте и Установите

Теперь ваши живые обои готовы. Скомпилируйте их и установите на ваш девайс под Android. После того, как вы их установите, вы сможете найти их в списке доступных обоев.

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

Сделайте Живые Обои под Android Используя GIF Анимацию.

Если GIF выглядить слишком маленьким, или неправильно позиционирован, вернитесь вновь к методу draw и настройте масштаб и положение.

Заключение

Тепере вы знаете, как использовать GIF анимацию, чтобы создать живые обои. Обязательно поэкспериментируюйте с другими вариантами GIF анимации. Если вы захотите выложить свои обои на Google Play, убедитесь, что у вас есть разрешение, от автора, на использование его GIF анимации в коммерческих целях. Зайдите на сайт Android Developer , чтобы узнать больше о классе WallpaperService .

Разработка живых обоев для Android ⁠ ⁠

Разработка живых обоев для Android Приложение на Android, Android разработка, Видео, Длиннопост

Всех приветствую. Решился я наконец рассказть о своём маленьком проектике.

Все началось примерно в 2014 году, когда я приобрел себе HTC one X. Этот аппарат был идеальным для меня, и начиная с того момента я стал фанатом HTC. В этом аппарате были интересные живые обои в силе слайд-шоу, всё в них было хорошо, но были некоторые ньюансы, например нельзя запускать смену изображения ручками, например через двойной тап по экрану, а этого очень хотелось. Картинки перемещались не только в одну (рандомную) сторону — к примеру.

И вот захотелось мне найти замену, которая меня бы удовлетворяла больше. Перелопачивая всё, что было на плей-мараркете найти что-то стоящее не удавалось. То работает рывками, то весит дофига, то свайпов нет, то растягивает изображение. Нашлось только ОДНО приложение платное, которое более-менее выполняло то, что мне хотелось, но тут сыграл роль мой перфекционизм, который никак не давай покоя: Зачем делать экраны настроек, интерфейс приложения каким-то цветастым-пердястым, почему вообще приложение платное, ведь ничего сверх естественного оно не делает. И так было много мелких причин, которые вылились в «не нравится? — сделай сам!». Ок, попробуем.

Для себя я поставил несколько целей:

1. Минимализм в весе приложения, — ибо почему приложение весит >10Мб? Чего там такого?

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

3. Обязательно использовать OpenGL 2.0 (ну и выше соответственно)! Только так можно добиться максимальной плавности и производительности.

4. Картинки прокручиваются влево-вправо и свайпом.

5. Двойной тап по экрану меняет изображение.

В процессе разработки удалось добиться всего что хотелось и даже больше:

1. Вес приложения 117кб. из них 70кб весит дефолтная картинка!

— — — Вот почему другие приложения весят в десятки раз больше — так и осталось загадкой.

2. Приложению ВООБЩЕ не нужны разрешения!

— — — Сравните с другими подобными, где и доступ в интернет и чуть ли доспу к СМС не запрашивают.

3. Можно выбрать как каталог из которого будут браться файлы, так и отдельно выбрать файл/файлы.

4. Удалось заставить воспроизводить видео-файлы!

— — — Сравнивая с аналогами которые в качестве обоев рабочего стола могут ставить видео-файлы, они либо платные, либо растягивают видео, ни у одного не видел возможность свайпа. А некоторые вообще сжирают оперативку и зависают. В целом вообще печаль.

И при этом откуда у них столько скачиваний? Ума не приложу.

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

Как создать живые обои на смартфоне Android

Любите изменять оформление своего мобильного устройства Android, устанавливая новые обои и темы, меняя иконки, устанавливая новые виджеты и добавляя новые элементы на его главный экран, но вам не хватает чего-то оригинального?

Как насчёт того, чтобы создать свои собственные живые обои для Android и удивить ими всех окружающих? В этой стать вы найдёте решение, позволяющее сделать это!

Как создать собственные живые обои на смартфоне Android

Существует множество приложений для реализации данной цели, здесь же мы рассмотрим на конкретном примере, как создавать живые обои для Android с помощью Video Wallpaper:

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

Кроме того, вы можете установить уже готовые живые обои на Android, если вы не хотите возиться с созданием своих собственных.

Если же вам интересно создание более профессиональных живых обоев, то вам нужно попробовать установить приложение KLWP для создания живых обоев.

Video Live Wallpaper

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

KLWP: Kustom Live Wallpaper HD

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

Андроид живые обои. Как делать?

Независимо от того, какие обои вы задумали сделать, существуют 2 различных подхода к реализации ваших задумок: SGL (в дальнейшем Canvas) и OpenGL. Когда я создавал свои первые обои у меня ушло несколько дней, чтобы попробовать различные средства и методы, поэтому эта статья сэкономит вам немного времени и быстро введет вас в курс дел.

Canvas

Если работает для вас — даже и не думайте об OpenGL

Что же такое Canvas? Это главный способ рисования GUI в андроид. Все формы, кнопочки и переключатели отрисовываются с помощью данной технологии. Нам дается Bitmap определенного размера (1024х600 например), на котором мы должны рисовать. Рисовать мы можем с использованием класса Canvas, который имеет богатое высокоуровневое АПИ для рисования. Скажем, нарисовать окружность заданной толщины определенного цвета с включенным сглаживанием не составляет никакой сложности. Есть даже поддержка шейдеров.

Но зачем тогда спрашивается OpenGL?

  • низкая скорость. Вся работа с графикой производится без аппаратного ускорения (есть исключение). То есть ваш Bitmap вы будите заполнять усилиями центрального процессора, с чем он отлично справляется, если Bitmap умеренного размера. Скорость рисования пропорциональна площади и сильно замедляется при ее увеличении.
  • никакого 3d и наворотов. Канва не поддерживает 3d, свойства материалов, расстановку и настройку источников света и др. Если вам нужно, что-то из этого списка, то придется эмулировать это самим, что еще больше замедлит и без того низкую скорость отрисовки.
  • простота интеграции в приложение. Рисование с помощью Canvas доступно вам сразу. Не надо создавать специальных поверхностей на которую будет выводится изображение созданное с помощью OpenGL. Не надо создавать поток, в котором работает OpenGL и синхронизировать его с вашим сервисом обоев (очень нетривиальная задача).
  • простое высокоуровневое АПИ. У канвы есть готовая функция рисования почти на все случаи жизни. Требуется 5 минут, чтобы прочитать документацию на класс и начать успешно использовать его.

OpenGL

Если Canvas не справляется, то больше ничего не остается.

OpenGL, DirectX — все мы слышали эти «крутые» слова. На Андроид у нас доступен OpenGL, но не простой (не такой как на десктопе), а урезанный. Причем у нас даже есть выбор: OpenGL ES 1.0/1.1 (работает везде) или OpenGL ES 2.0 (Android 2.2+). Что такое ES в названии? ES говорит нам о том, что это урезанная версия OpenGL, из которой убрали все лишнее, чтобы сделать АПИ как можно более компактнее и не тащить за собой на мобильные устройства вещи, которые легко эмулировать на центральном процессоре. То есть не все примеры из книжек по обычному OpenGL у вас заработают, но в принципе осталось все также.

Как было замечено версий у нас две: 1.0/1.1 и 2.0. Почитать об их отличиях можно в википедии (выбрать английский язык). Причем не все устройства одинаково поддерживают все расширения OpenGL ES, перед тем как использовать некоторые, нужно убедится, что это поддреживается (почитать можно тут).

  • тяжело интегрировать в приложение. Чтобы выводить графику на экран устройства с помощью OpenGL необходимо создать специальную поверхность и специальный поток, который будет на этой поверхности рисовать. Необходимо также позаботиться о синхронизации системы и потока.
  • сложное низкоуровневое АПИ. У нас нет функции нарисовать квадрат, нет функции вывести картинку. Зато есть куча флагов и режимов рисования. Если механизмы задания вершин полигонов, матриц преобразования координат, функции загрузки текстур и средства управления наложением… В общем все очень запутано, если вы раньше никогда не имели дело с OpenGL. На освоение уйдет несколько дней.
  • высокая скорость работы. Никогда ваше приложение с использованием Canvas не будет работать быстрее и плавнее чем с использованием OpenGL (при наличии прямых рук конечно же).
  • поддержка 3d и наворотов. Трехмерные гонки или стрелялки? Все это возможно с использованием OpenGL. Создавайте источники света, управляйте камерой, создайте реалистичный эффект водной поверхности, используйте материалы и др.

OpenGL. Делаем проще.

Когда тяжело в одиночку — просим помощи.

Понятно, что мы далеко не первые, кто решил использовать OpenGL и все мы уже играли в красивые игрушки, перерезали веревки и спасали сворованные яйца. Редко когда игра пишется абсолютно с нуля, обычно используются движки, которые берут на себя все скучные занятия и предлагают нам более простое АПИ для реализации наших фантазий. И оказываться, применительно к живым обоям, вариантов сделать проще у нас 2…

GLSurfaceView adapted for 3D Live Wallpapers

Так называется статья Роберта Грина, где он рассказывает о созданных им классах (основной из которых GLWallpaperService), которые выполняют всю работу по настройке за нас. Нам же остается писать код, который рисует. Скачав с github файлы проекта (проект живой и недавно обновлялся), вы получите готовые обои, которые правда ничего не делают красивого (просто заливают весь фон цветом), но они уже работают. Вам остается только написать требуемый код для рисования. Об интерфейсе взаимодействия с системой и базовой настройке OpenGL уже позаботились. У Роберта используется OpenGL 1.0/1.1, но перейти на 2.0 не представляет никакой сложности. Стоит так же заметить, что никаких дополнительных средств для рисования не предоставляется, рисовать придется все тем же OpenGL ES АПИ.

AndEngine

AndEngine это настоящий 2d движок для создания игр. Движок поддерживает несколько расширений, среди которых и physicsbox2d для создания физики. Сам движок довольно популярный с открытым кодом (Java). Все средства движка можно использовать для создания обоев. Есть много примеров, которые являются единственной «документацией» движка. Если надо что-то сделать — вспоминаем в каком примере мы это видели и смотрим как это там реализовано. Так же есть форум, где можно попросить помощи (форум активный, быстро помогают).

Теперь о плохом.

Версии у движка 2. Первая (GLES1) использует OpenGL ES 1.0/1.1, вторая (GLES2) — ES 2.0. АПИ в GLES2 намного продвинулось вперед, поэтому лучше использовать GLES2, но мы тогда теряем пользователей Андроида версии 2.1 (GLES2 на нем не работает, a живые обои замечательно работают). Мне удалось запустить обои используя обе версии AndEngine. Но в GLES1 сразу же столкнулся с невозможностью изменить настройки камеры при изменении ориентации экрана (приходится изменять масштаб сцены по одной из осей, в GLES2 АПИ это позволяет).

Движок создан для 2d игр, поэтому никакого АПИ для поддержки 3d не предоставляется (никто не запрещает использовать OpenGL напрямую). Так же отсутствуют казалось бы такие нужные функции как рисование окружности и даже треугольника. Движок больше ориентирован на спрайты. Добавить функцию рисования той же окружности, так чтобы она вписывалась в систему классов движка довольно тяжело — никакой документации нет. Поэтому придется перелопатить много кода и разбираться что к чему.

Заключение.

Начнем делать выводы с того, что я приведу пример: один кадр созданных мной обоев с помощью Canvas рисуется за 17мс на Kindle Fire (6 из которых «лочится» и «анлочится» канва). Это много, для заполнения фона текстурой 16х16px, вывода изображения 350х180px и отрисовки 4х окружностей различной толщины и радиуса. При использовании OpenGL это делается на порядок быстрее. О хорошем: код отрисовки я написал за час с небольшим, 17мс немного — анимация плавная.

В остатке.

Используйте канву, если вам не важно 3d, если ваша анимация не очень сложна и не требует больших вычислительных ресурсов.

Используйте AndEngine, если вы делаете 2d обои. Изучив примеры и почитав форум, вы быстро приступите к созданию вашей анимации, а дополнительные расширения движка позволят вам с легкостью внедрить в вашу анимацию эффектные решения (физика, система частиц и др.)

Используйте GLWallpaperService Роберта Грина. Если вы хорошо владеете OpenGL и делаете 3d обои, он позволит вам, не отвлекаясь на рутину, быстро приступись к кодированию вашей анимации.

Вы также можете адаптировать многие ваши любимые графические OpenGL движки для создания живых обоев. Используя код GLWallpaperService и/или AndEngine в качестве примера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *